7

QTreeView でハード ドライブ パーティションを探索しています。私の Qtreeview では、ツリービューのアイテムのダブル クリック イベントでシングル クリック イベントも生成されます。

connect(ui->treeview,SIGNAL(doubleclicked(QModelIndex)),this,SLOT(Ondoubleclicktree(QModelIndex)));
connect(ui->treeview,SIGNAL(clicked(QModelIndex)),this,SLOT(Onclickedtree(QModelIndex)));

ダブルクリックイベントのみが必要です。シングルクリックイベントスロットに入るのを止める方法を教えてください。ありがとう。

4

1 に答える 1

3

すでに述べたことをまとめる: 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();
}

これが役立つかどうか教えてください。

于 2015-07-14T10:55:50.157 に答える