Qt點擊QLabel控件觸發CLICK事件
阿新 • • 發佈:2017-10-18
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事件