尝试将已经提到的东西放在一起:如果您不担心单击时会出现轻微的延迟,您只需要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();
};
我的树视图.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();
}
让我知道这是否有帮助。