簡體   English   中英

Qtreeview項目上的DoubleClick活動

[英]DoubleClick events on Qtreeview items

我正在使用QTreeView來探索硬盤分區。在我的Qtreeview中,雙擊事件也會生成其treeview單擊事件。

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

我只想要雙擊事件。 請幫助我如何阻止它進入單擊事件插槽。 謝謝。

嘗試將已經提到的內容放在一起:如果您不擔心單次點擊會有輕微的延遲,您只需在班級中設置一個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();
}

如果這有幫助,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM