Qtreeview项目上的DoubleClick活动

Ash*_*ish 6 c++ qt qtreeview

我正在使用QTreeView来探索硬盘分区.在我的Qtreeview中,双击事件也会生成其treeview单击事件.

connect(ui->treeview,SIGNAL(doubleclicked(QModelIndex)),this,SLOT(Ondoubleclicktree(QModelIndex)));
connect(ui->treeview,SIGNAL(clicked(QModelIndex)),this,SLOT(Onclickedtree(QModelIndex)));
Run Code Online (Sandbox Code Playgroud)

我只想要双击事件.请帮助我如何阻止它进入单击事件插槽.谢谢.

Eri*_*rik 3

尝试将已经提到的内容放在一起:如果您不担心对单击的反应会出现轻微的滞后,则只需QTimer在类中设置一个,单击即可开始,如果收到第二次单击则停止在一定的时间窗口内。然后,您只需将计时器的超时连接到单击即可完成您想要执行的操作的插槽。

设置此方法的一种方法(当然不是唯一的方法,也可能不是最优雅的),如下所示:

mytreeview.h

#ifndef MYTREEVIEW_H
#define MYTREEVIEW_H

#include <QTreeView>
#include <QTimer>

class MyTreeView: public QTreeView
{
  Q_OBJECT
  public:
  MyTreeView(QWidget *parent = 0);

protected:
  virtual void mouseDoubleClickEvent(QMouseEvent * event);
  virtual void mousePressEvent(QMouseEvent * event);

private:
  QTimer timer;

private slots:
  void onSingleClick();

};
Run Code Online (Sandbox Code Playgroud)

mytreeview.cpp

#include "mytreeview.h"

#include <QtCore>


MyTreeView::MyTreeView(QWidget *parent) : QTreeView(parent)
{
  connect(&timer,SIGNAL(timeout()),this,SLOT(onSingleClick()));
}


void MyTreeView::mouseDoubleClickEvent(QMouseEvent * event)
{
  Q_UNUSED(event);
  qDebug() << "This happens on double click";
  timer.stop();
}


void MyTreeView::mousePressEvent(QMouseEvent * event)
{
  Q_UNUSED(event);
  timer.start(250);
}

void MyTreeView::onSingleClick()
{
  qDebug() << "This happens on single click";
  timer.stop();
}
Run Code Online (Sandbox Code Playgroud)

让我知道这是否有帮助。