首页 > 其他分享 >Qt 事件过滤器原理(installEventFilter函数)

Qt 事件过滤器原理(installEventFilter函数)

时间:2022-10-10 10:24:16浏览次数:78  
标签:installEventFilter 函数 事件 按钮 过滤器 Qt

1、Qt实现事件过滤器的步骤如下:
①、Qt调用

void QObject::installEventFilter (QObject* filterObj)

把filterObj对象安装(或注册)为事件过滤器,filterObj也称为过滤器对象。事件过滤器通常在构造函数中进行注册。
②、在上一步注册的filterObj对象,通过调用

bool QObject::eventFilter(QObject* obj, QEvent* e);

来接收拦截到的事件。也就是说拦截到的事件在filterObj对象中的eventFilter函数中处理。eventFilter的第一个参数obj指向的是事件本应传递到的目标对象。
③、使用QObject::removeEventFilter(QObject *obj)函数可以删除事件过滤器。
2、事件过滤器处理事件的规则
①、过滤器对象的eventFilter()函数可以接受或拒绝拦截到的事件,若该函数返回false,则表示事件需要作进一步处理,此时事件会被发送到目标对象本身进行处理(注意:这里并未向父对象进行传递),若evetnFilter()返回true,则表示停止处理该事件,此时目标对象和后面安装的事件过滤器就无法获得该事件。
②、若同一对象安装了多个事件过滤器,则最后安装的过滤器首先被激活。
3、为什么使用事件过滤器
使用事件过滤器可以简化程序代码。比如按钮1和标签1,对按下A键的事件响应相同的操作,若不使用事件过滤器,则需要分别子类化按钮和标签部件,并重新实现各自的事件处理函数。再如使用同一个子类化按钮的类C创建的按钮1和按钮2,对按下键A,按钮1和按钮2需要作不同的响应,若不使用事件过滤器,则他们的响应是相同的,若使用事件过滤器,则可以拦截按钮1或按钮2的事件并作特殊处理。

Qt 事件过滤器原理(installEventFilter函数)
https://blog.51cto.com/u_15069450/3384245

4、理解事件过滤器

观察者模式:其原理为,设有一目标对象S,它有多个观察该对象的对象G1,G2,G3,当S发生变化时,S的观察者会依情形改变自身。应用于Qt事件过滤器,则是,首先使用S的成员函数installEventFilter函数把G1,G2,G3设置为S的观察者,所有本应传递给S的事件E,则先传递给观察者G1,G2,G3,然后观察者调用其成员函数eventFilter对传递进来的事件进行处理,若eventFilter返回true表示事件处理完毕,返回false则返回给被观察者S进行处理。见图2-13。
Qt 事件过滤器原理(installEventFilter函数)_对象名

Qt 事件过滤器原理(installEventFilter函数)
https://blog.51cto.com/u_15069450/3384245

标签:installEventFilter,函数,事件,按钮,过滤器,Qt
From: https://www.cnblogs.com/keleman/p/16774724.html

相关文章

  • 在QTdesigner界面中使用按钮切换pyqtgraph画图
    在QtDesigner中先建立UI,转成py文件,文件名为:plot_ui.py#-*-coding:utf-8-*-################################################################################......
  • MQTT 消息持久化
    MQTT消息持久化前提条件:服务器(EMQX)&生产者都正常工作--消费者正常或者非正常掉线,一段时间过后,消费者重新上线,如何保证接收掉线时间内的离线消息?一、持久化会话当消......
  • qt使用webengine加载web页面
    #include"mainwindow.h"#include"ui_mainwindow.h"#include<QUrl>#include<QtWebEngineWidgets/QWebEngineView>MainWindow::MainWindow(QWidget*parent):QMainWi......
  • qt 可执行程序 打包 安装程序
    ​​https://subingwen.cn/qt/qt-setup/#1-2-%E5%8F%91%E5%B8%83​​......
  • pyqtgraph 内嵌到 Qtdesigner 设计界面中
    fromPySide6.QtWidgetsimportQApplication,QMainWindow,QWidgetimportpyqtgraphaspgimportsysfromPySide6importQtCore,QtWidgetsimportnumpyasnpfrom......
  • qt 设置程序的图标
    创建一个ico图标,拷贝到程序根目录修改程序配置文件xxx.pro...RC_ICONS=app.ico重新发布即可!......
  • Qt最基本的布局,创建window界面
    #include"mainwindow.h"#include<QMenuBar>#include<QToolBar>#include<QStatusBar>#include<QLabel>#include<QDockWidget>#include<QTextEdit>MainWindow::MainWin......
  • qt 回车事件之Qt::Key_Return与Qt::Key_Enter
    这两个都得包含限制!缺一个不行。Key_Enter是小键盘的确认键,Key_Return是大键盘的回车键。voidWidget::keyPressEvent(QKeyEvent*ev){if(ev->key()==Qt::Key_Enter|......
  • mac 下qt程序添加程序图标
    第一步桌面新建一个文件夹,命名为logo.iconset。将png图标(原图只能是.png文件)放进去。第二步:打开终端,cd到这个文件夹,依次执行下面的语句:sips-z1616logo.png--outicon_......
  • qt 设置图标
    #include"mainwindow.h"#include"ui_mainwindow.h"MainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(newUi::MainWindow){ui->setupUi(th......