События DoubleClick для элементов Qtreeview

Я работаю над QTreeView, чтобы исследовать раздел жесткого диска. В моем Qtreeview при двойном щелчке по его элементам дерева также генерируется событие одиночного щелчка.

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

Я хочу только событие двойного щелчка. Пожалуйста, помогите мне, как остановить его для входа в слот события с одним щелчком мыши. Спасибо.


person Ashish    schedule 13.11.2013    source источник
comment
Вам действительно нужно обрабатывать оба события: щелчок и двойной щелчок? Если нет, удалите одно из соединений.   -  person vahancho    schedule 13.11.2013
comment
мне нужны оба соединения   -  person Ashish    schedule 13.11.2013
comment
Вот аналогичный вопрос: stackoverflow.com/questions/4627347/   -  person vahancho    schedule 13.11.2013
comment
Спасибо за ответ, он немного типичен. Не могли бы вы уточнить это решение, данное wysota, или любой другой способ сделать это.   -  person Ashish    schedule 13.11.2013
comment
Я полагаю, что это довольно описательно само по себе. Вам нужно настроить таймер и запустить его, как только вы получите событие клика. По истечении времени таймера (через несколько миллисекунд) вы можете проверить, было ли также получено событие двойного щелчка, и обработать любой из них (в зависимости от вашей цели).   -  person vahancho    schedule 13.11.2013


Ответы (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();
}

Позвольте мне знать, если это помогает.

person Erik    schedule 14.07.2015