把别人的例子改了一下
LabelPress.h文件
#ifndef LabelPress_H
#define LabelPress_H
//#include "QLabel"
#include <QtWidgets>
//#include "qcoreevent.h"
//#include "qevent.h"
//#include "qtimer.h"
class LabelPress:public QLabel
{
Q_OBJECT
public:
explicit LabelPress(QWidget *parent = 0);//explicit QLabel(const QString &text, QWidget *parent=0, Qt::WindowFlags f=0);
explicit LabelPress(const QString &text, QWidget *parent=0, Qt::WindowFlags f=0);
~LabelPress();
private:
void init();
protected:
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
private:
bool mouse_press;
int clicked_num;
QTimer* timer;
private slots:
void SlotTimerOut();
signals:
void LabelClicked();
void LabelDoubleClicked();
};
#endif //LabelPress_H
LabelPress.cpp
#include "LabelPress.h"
LabelPress::LabelPress( QWidget *parent /*= 0*/ ):QLabel(parent)
{
init();
}
LabelPress::LabelPress(const QString &text, QWidget *parent,
Qt::WindowFlags f):QLabel(text,parent,f)
{
init();
}
void LabelPress::init()
{
mouse_press = false;
clicked_num = 0;
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(SlotTimerOut()));
}
LabelPress::~LabelPress()
{
delete timer;
}
void LabelPress::mousePressEvent( QMouseEvent *event )
{
if (event->button() == Qt::LeftButton)
{
mouse_press = true;
}
}
void LabelPress::mouseReleaseEvent( QMouseEvent *event )
{
if(mouse_press && this->rect().contains(event->pos()))
{
clicked_num++;
mouse_press = false;
timer->start(200);
}
}
void LabelPress::SlotTimerOut()
{
if (clicked_num == 1)
{
emit LabelClicked();
}
if (clicked_num >= 2)
{
emit LabelDoubleClicked();
}
clicked_num = 0;
timer->stop();
}