QT为QLabel添加Click事件(如果我们使用组件,我们关心的是信号槽;如果我们自定义组件,我们关心的是事件)
其实就是改写了一个函数:mouseReleaseEvent,当在QLabel放开鼠标的时,就发射点击信号:
ClickedLabel.h
#ifndef CLICKEDLABEL_H #define CLICKEDLABEL_H #include <QLabel> #include <QWidget> #include <Qt> class ClickedLabel : public QLabel { Q_OBJECT public: explicit ClickedLabel(QWidget *parent = 0,Qt::WindowFlags f=Qt::WindowFlags()); ~ClickedLabel(); signals: void clicked(); protected: void mouseReleaseEvent(QMouseEvent *ev); }; #endif // CLICKEDLABEL_H
ClickedLabel.cpp
#include "clickedlabel.h" ClickedLabel::ClickedLabel(QWidget *parent,Qt::WindowFlags f):QLabel(parent) { } ClickedLabel::~ClickedLabel() { } void ClickedLabel::mouseReleaseEvent(QMouseEvent *ev) { emit clicked(); }
总的来说,如果我们使用组件,我们关心的是信号槽;如果我们自定义组件,我们关心的是事件。因为我们可以通过事件来改变组件的默认操作。比如,如果我们要自定义一个能够响应鼠标事件的EventLabel,我们就需要重写QLabel的鼠标事件,做出我们希望的操作,有可能还得在恰当的时候发出一个类似按钮的clicked()信号(如果我们希望让这个EventLabel能够被其它组件使用)或者其它的信号。
然后在UI界面中右键菜单中选择“提升到”,在对话框中输入对应的派生类名称和头文件。之后单击“添加”按钮
然后选中提升后的label,在右键菜单中选择改变信号/槽,在信号中增加 clicked()
然后在转到槽中选择clicked信号即可。