赞
踩
来点实战:
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
-
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
-
- // 为子部件安装事件过滤器(其实就是允许父窗口监视自己)
- ui->textEdit->installEventFilter(this);
- ui->spinBox->installEventFilter(this);
- }
-
- MainWindow::~MainWindow()
- {
- delete ui;
- }
-
- bool MainWindow::eventFilter(QObject *watched, QEvent *event)
- {
- // 监视 textEdit 子部件的事件
- if(watched == ui->textEdit)
- {
- // 监视 textEdit 子部件的 wheel 事件
- if(event->type() == QEvent::Wheel)
- {
- QWheelEvent *wheelEvt = static_cast<QWheelEvent*>(event);
- if(wheelEvt->delta() > 0)
- {
- ui->textEdit->zoomIn();
- }
- if(wheelEvt->delta() < 0)
- {
- ui->textEdit->zoomOut();
- }
- // 不允许事件的继续传递
- // 阻断事件的传递
- return true;
- }
- }
- // 监视 spinBox 子部件的事件
- if(watched == ui->spinBox)
- {
- // 监视 spinBox 子部件的键盘按下事件
- if(event->type() == QEvent::KeyPress)
- {
- QKeyEvent *keyEvt = static_cast<QKeyEvent*>(event);
- if(keyEvt->key() == Qt::Key_M)
- {
- ui->spinBox->setValue(99);
- }
- }
- return true;
- }
-
- return QMainWindow::eventFilter(watched,event);
- }
MainWindow里的 eventFliter 监视着 textEdit 和 spinBox 的事件,所以完全可以在 MainWindow 里面阻断/处理所有子部件的所有类型的消息!
参考:
不二如是:https://fishc.com.cn/forum.php?mod=viewthread&tid=77543&ctid=447
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。