Qt中的Label標簽控件的作用絕不僅僅限於顯示靜態文本,其實它的功能很強大,由於其有setPixmap()成員函數,故而可以當顯示圖片窗口使用,而且還可以實時顯示攝像頭捕獲的圖片,然后它對鼠標事件的支持卻沒有QWidget那樣強大,很多時候我們想要QLabel捕獲鼠標單擊或雙擊的事件,它本身無法實現,我們只好寫一個新的class來實現我們需要的功能,這也是C++的強大之處所在,繼承特性可以讓我們在原有的基礎上無限增加新的特性。那么這里我們想要QLabel捕獲鼠標的雙擊事件,我們需要新建一個類名為QtClickableLabel,繼承於QLabel:
qtclickablelabel.h
#ifndef QTCLICKABLELABEL_H #define QTCLICKABLELABEL_H #include <QLabel> class QtClickableLabel : public QLabel { Q_OBJECT public: explicit QtClickableLabel(QWidget *parent = 0); explicit QtClickableLabel(const QString &text = "", QWidget *parent = 0); ~QtClickableLabel(); signals: void clicked(); protected: void mouseDoubleClickEvent(QMouseEvent *event); }; #endif // QTCLICKABLELABEL_H
qtclickablelabel.cpp
#include "qtclickablelabel.h" QtClickableLabel::QtClickableLabel(const QString &text, QWidget *parent) : QLabel(parent) { this->setText(text); } QtClickableLabel::QtClickableLabel(QWidget *parent) : QLabel(parent) { } QtClickableLabel::~QtClickableLabel() { } void QtClickableLabel::mouseDoubleClickEvent(QMouseEvent *event) { emit clicked(); }
如果想實現捕獲鼠標單擊事件,只需要添加如下代碼即可:
void QtClickableLabel::mousePressEvent(QMouseEvent *event) { emit clicked(); }
最后不要忘了在UI Designer把原來的QtLabel的控件promote 到這個QtClickableLabel,盡情享用吧~