C++ 双击QLabel

C++ 双击QLabel,c++,qt,c++11,C++,Qt,C++11,为了解决我的问题,我读了这本书和这本书。但它们不起作用。我创建了一个类QLabel: mouselabel.h #ifndef MOUSELABEL_H #define MOUSELABEL_H #include <QLabel> #include <QMouseEvent> #include <QEvent> #include <QDebug> class MouseLabel : public QLabel { Q_OBJECT

为了解决我的问题,我读了这本书和这本书。但它们不起作用。我创建了一个类QLabel:

mouselabel.h

#ifndef MOUSELABEL_H
#define MOUSELABEL_H

#include <QLabel>
#include <QMouseEvent>
#include <QEvent>
#include <QDebug>


class MouseLabel : public QLabel
{
    Q_OBJECT
public:
    explicit MouseLabel(QWidget *parent = 0);
    void mouseMoveEvent(QMouseEvent *event);
    void mousePressEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
    void mouseDoubleClickEvent(QMouseEvent *event);
    void leaveEvent(QMouseEvent *);

    int x, y;

signals:
    void Mouse_Pressed();
    void Mouse_Position();
    void Mouse_Left();
    void Mouse_Release();
    void Mouse_DoubleClick();

public slots:

};

#endif // MOUSELABEL_H

如两个链接中所述,为了区分单击和双击,我创建了一个计时器,它在mouserelease事件发生时启动,在双击鼠标时停止。但是,这是行不通的。你能帮我解决这个问题吗?

最简单的解决方案是使用
QBasicTimer
,只需重载这两种方法,并在小部件中设置计时器即可:

  void mouseReleaseEvent(QMouseEvent *) {
    if (timer.isActive()) {
        timer.stop();
        qDebug() << "double click";
      }
    else {
        timer.start(300, this);
      }
  }

  void timerEvent(QTimerEvent *) {
    timer.stop();
    qDebug() << "single click";
  }

  QBasicTimer timer;
void mouseReleaseEvent(QMouseEvent*){
if(timer.isActive()){
timer.stop();

qDebug()我将调查为什么受支持的解决方案不适合您,而不是重新发明您自己的解决方案。
  void mouseReleaseEvent(QMouseEvent *) {
    if (timer.isActive()) {
        timer.stop();
        qDebug() << "double click";
      }
    else {
        timer.start(300, this);
      }
  }

  void timerEvent(QTimerEvent *) {
    timer.stop();
    qDebug() << "single click";
  }

  QBasicTimer timer;