实现QLabel点击事件,及自定义对话框@TOC
实现QLabel点击事件
我们经常会遇到,点击QLabel弹出一个Dialog进行数据的更新,但是QT本身的QLabel没有clicked事件,这时需要我们继承QLabel然后加入自定义点击事件。
自定义类继承QLabel
我们可以通过重写QLabel中的mousePressEvent()或mouseReleaseEvent()事件来达到QLabel的点击事件。
CustomLabel.h 代码如下
#ifndef CUSTOMLABEL_H
#define CUSTOMLABEL_H
#include <QWidget>
#include <QLabel>
#include <QMouseEvent>
class CustomLabel : public QLabel
{
Q_OBJECT
public:
explicit CustomLabel(QWidget *parent = nullptr);
signals:
void clicked();
protected:
virtual void mousePressEvent(QMouseEvent* event);//重写mousePressEvent事件
};
#endif // CUSTOMLABEL_H
首先在里面定义一个信号clicked();
然后声明要重写的mousePressEvent();
CustomLabel.cpp 代码如下
#include "customlabel.h"
CustomLabel::CustomLabel(QWidget *parent) : QLabel(parent)
{
}
void CustomLabel::mousePressEvent(QMouseEvent *ev)
{
//如果单击了就触发clicked信号
if (ev->button() == Qt::LeftButton) {
//触发clicked信号
emit clicked();
}
//将该事件传给父类处理
QLabel::mousePressEvent(ev);
}
最后可以将QLabel提升为CustomLabel。
操作步骤如下:
1、首先选中要修改的QLabel的组件。
2、右键然后选择提升为。
3、然后在提升类名称中写入CustomerLabel,点击添加,一定注意大小写。
4、点击提升即可。
具体使用
可以通过connect链接到自定义的clicked信号
connect(ui->temperature1_limit,&CustomLabel::clicked,this,[=](){
qDebug()<<"temperature1_limit is run";
});