Qt make clickable label 制作可點擊的Label控件


 

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,盡情享用吧~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM