QT 通過installEventFilter實現監控控制元件滑鼠移入移出效果
阿新 • • 發佈:2021-07-10
新增監聽事件
先呼叫installEventFilter,讓某個控制元件監聽另一個控制元件事件,如下:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); ui->pushButton->installEventFilter(this); }
這裡的ui->pushButton->installEventFilter(this);表示讓視窗(this/MainWindow類)監聽按鈕(pushButton)的所有事件,按鈕的所有事件都會被監聽到.
監聽控制元件(this/MainWindow)實現eventFilter(QObject *target, QEvent *event) 方法
MainWindow標頭檔案新增eventFilter宣告:
private slots: bool eventFilter(QObject *target, QEvent *event);
實現:
bool MainWindow::eventFilter(QObject *target, QEvent *event) { if (target == ui->pushButton) { if (event->type() == QEvent::Enter) { qDebug()<< "滑鼠移入..."; } if (event->type() == QEvent::Leave) { qDebug() << "滑鼠移出..."; } } }
target 為觸發事件的控制元件,event為事件
可以多個控制元件呼叫installEventFilter 指向一個控制元件,所以此處做個判斷.
ui->pushButton->installEventFilter(this); ui->pushButton_2->installEventFilter(this); ui->pushButton_3->installEventFilter(this);