#ifndef _LABEL_H_
#define _LABEL_H_
#include "QLabel"
#include <QWidget>
#include "qcoreevent.h"
#include "qevent.h"
#include "qtimer.h"
class Label:public QLabel
{
Q_OBJECT
public:
explicit Label(QWidget *parent = 0);
~Label();
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 //_LABEL_H_
#include "label.h"
Label::Label( QWidget *parent /*= 0*/ ):QLabel(parent)
{
mouse_press = false;
clicked_num = 0;
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(SlotTimerOut()));
}
Label::~Label()
{
delete timer;
}
void Label::mousePressEvent( QMouseEvent *event )
{
if (event->button() == Qt::LeftButton)
{
mouse_press = true;
}
}
void Label::mouseReleaseEvent( QMouseEvent *event )
{
if(mouse_press && this->rect().contains(event->pos()))
{
clicked_num++;
mouse_press = false;
timer->start(200);
}
}
void Label::SlotTimerOut()
{
if (clicked_num == 1)
{
emit LabelClicked();
}
if (clicked_num >= 2)
{
emit LabelDoubleClicked();
}
clicked_num = 0;
timer->stop();
}
本文详细介绍了如何使用Qt框架中的信号与槽机制,通过自定义类Label来实现动态显示文本信息的功能,并包括了鼠标事件处理、定时器应用以及单击与双击事件触发的信号发送。
877

被折叠的 条评论
为什么被折叠?



