すでに述べたことをまとめる: 1 回のクリックに対する反応のわずかな遅れが気にならない場合は、1 回のクリックでQTimer
開始し、2 回目のクリックを受け取ったら停止するクラスを設定するだけで済みます。特定の時間枠内。次に、タイマーのタイムアウトを、ワンクリックでやりたいことを行うスロットに接続するだけです。
これを設定する 1 つの方法 (確かに唯一の方法ではなく、おそらく最も洗練された方法ではありません) を以下に示します。
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();
}
これが役立つかどうか教えてください。