C++ 双击QLabel
为了解决我的问题,我读了这本书和这本书。但它们不起作用。我创建了一个类QLabel: mouselabel.hC++ 双击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
#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;