Qt QLable 響應單擊點選事件
阿新 • • 發佈:2019-02-20
第一種方法
效果圖
主要程式碼
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->label->installEventFilter(this);//安裝事件過濾器 } MainWindow::~MainWindow() { delete ui; } bool MainWindow::eventFilter(QObject *obj, QEvent *event) { if (obj == ui->label)//指定某個QLabel { if (event->type() == QEvent::MouseButtonPress)//mouse button pressed { QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event); if(mouseEvent->button() == Qt::LeftButton) { QMessageBox::information(NULL,"點選","點選了我", QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes); return true; } else { return false; } } else { return false; } } else { // pass the event on to the parent class return QMainWindow::eventFilter(obj, event); } }
第二種方法
使用繼承QLabel,重寫事件處理的回撥函式mousePressEvent
效果圖
主要程式碼
#include "mylabel.h" MyLabel::MyLabel(const QString & text,QWidget *parent) : QLabel(parent) { setText(text); } MyLabel::MyLabel(QWidget *parent) : QLabel(parent) { } void MyLabel::mousePressEvent(QMouseEvent *event) { //Qt::LeftButton //Qt::RightButton if(event->button()== Qt::LeftButton) { QMessageBox::information(NULL,"單擊","單擊了我", QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes); } }
第三種方法
重寫
event()
函式
主要程式碼
#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,"單擊","單擊了我", QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes); return true; } } return QLabel::event(e); }
三種方法全部工程程式碼上傳至csdn,Qt 5.9.0