1. 程式人生 > >Qt點擊QLabel控件觸發CLICK事件

Qt點擊QLabel控件觸發CLICK事件

tex ati endif type geb idg stat pan over

原本QLabel控件是沒有CLICK事件的,我們可以通過重寫函數繼承QLabel的方法讓QLabel有CLICK事件

直接上代碼,如果看文章看不懂,可以去我網盤看看視頻:http://m-carr.ys168.com,在Qt視頻教程目錄裏面

#ifndef MYLABEL_H
#define MYLABEL_H
#include <QLabel>
#include <QMessageBox>
#include <QMouseEvent>

class MyLabel:public QLabel
{
    Q_OBJECT
public:
    MyLabel(
const QString & text,QWidget *parent=0); MyLabel(QWidget *parent=0); signals: public slots: public: virtual bool event(QEvent *event) override; }; #endif // MYLABEL_H
#include "mylabel.h"

MyLabel::MyLabel(const QString & text,QWidget *parent):QLabel(parent)
{
    setText(text);
}

MyLabel::MyLabel(QWidget 
*parent):QLabel(parent) { } bool MyLabel::event(QEvent *e) { if(e->type()==QEvent::MouseButtonPress) { QMouseEvent *mouseEvent=static_cast<QMouseEvent*>(e); if(mouseEvent->button()==Qt::LeftButton) { QMessageBox::information(NULL,"提示","點擊QLabel控件彈出了我
",QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes); return true; } } return QLabel::event(e); }
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "mylabel.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    MyLabel* label=new MyLabel("點我試試",this);
    label->setGeometry(20,20,30,30);

}

MainWindow::~MainWindow()
{
    delete ui;
}
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

Qt點擊QLabel控件觸發CLICK事件