【问题标题】:DoubleClick on QLabel双击 QLabel
【发布时间】:2015-05-27 02:36:30
【问题描述】:

我已阅读此How to distinguish between mouseReleaseEvent and mousedoubleClickEvent on QGrapnhicsScene 和此Distinguish between single and double click events in Qt 以解决我的问题。但它们不起作用。我创建了一个类 QLabel:

鼠标标签.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

鼠标标签.cpp

#include "mouselabel.h"

MouseLabel::MouseLabel(QWidget *parent) :
    QLabel(parent)
{
}


void MouseLabel::mouseMoveEvent(QMouseEvent *event) {
    this->x = event->x();
    this->y = event->y();
    emit Mouse_Position();
}

void MouseLabel::mousePressEvent(QMouseEvent *event)
{
    emit Mouse_Pressed();
}

void MouseLabel::mouseReleaseEvent(QMouseEvent *event)
{
    emit Mouse_Release();
}

void MouseLabel::mouseDoubleClickEvent(QMouseEvent *event)
{
    emit Mouse_DoubleClick();
}

void MouseLabel::leaveEvent(QMouseEvent *)
{
    emit Mouse_Left();
}

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

【问题讨论】:

  • 我会调查为什么支持的解决方案对您不起作用,而不是重新发明您自己的解决方案。

标签: c++ qt c++11


【解决方案1】:

最简单的解决方案是使用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;

缺点是计时器方法会延迟单击,这有点烦人,但您可以屏蔽它,例如选择对象,使用mousePressEvent 立即响应。

【讨论】:

    猜你喜欢
    • 2017-12-10
    • 2018-01-16
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    相关资源
    最近更新 更多