我正在使用QTreeView来探索硬盘分区。在我的Qtreeview中,在其单击事件的单击事件上也会生成双击事件。
connect(ui->treeview,SIGNAL(doubleclicked(QModelIndex)),this,SLOT(Ondoubleclicktree(QModelIndex)));
connect(ui->treeview,SIGNAL(clicked(QModelIndex)),this,SLOT(Onclickedtree(QModelIndex)));
我只想要双击事件。请帮助我如何阻止它进入单击事件插槽。 感谢。
答案 0 :(得分:1)
尝试将已经提到的内容放在一起:如果您不担心单次点击会有轻微的延迟,您只需要在班级中设置一个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();
};
<强> 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();
}
如果这有帮助,请告诉我。