其實就是改寫了一個函數:mouseReleaseEvent,當在QLabel放開鼠標的時,就發射點擊信號。
- #ifndef CLICKEDLABEL_H_
- #define CLICKEDLABEL_H_
- #include <QLabel>
- #include <QWidget>
- class ClickedLabel : public QLabel
- {
- Q_OBJECT
- signals:
- void Clicked(ClickedLabel* clicked);
- public:
- ClickedLabel(QWidget *parent=0): QLabel(parent),m_str("")
- {
- setText(m_str);
- };
- ~ClickedLabel() {};
- protected:
- void mouseReleaseEvent( QMouseEvent* );
- private:
- QString m_str;
- };
- #endif /* CLICKEDLABEL_H_ */
- #include "ClickedLabel.h"
- void ClickedLabel::mouseReleaseEvent(QMouseEvent *evt)
- {
- emit Clicked(this);
- }
參考:http://blog.csdn.net/tingsking18/article/details/4071619
http://qt-project.org/wiki/Make-a-QLabel-Clickable
--------------------------------------------------------------------------------
總的來說,如果我們使用組件,我們關心的是信號槽;如果我們自定義組件,我們關心的是事件。因為我們可以通過事件來改變組件的默認操作。比如,如果我們要自定義一個能夠響應鼠標事件的EventLabel,我們就需要重寫QLabel的鼠標事件,做出我們希望的操作,有可能還得在恰當的時候發出一個類似按鈕的clicked()信號(如果我們希望讓這個EventLabel能夠被其它組件使用)或者其它的信號。
摘自豆子博客第18節《事件》