Qt 事件

文章目录

1.基本介绍

1.QT 中事件的定义

在 Qt 里,事件是对程序运行时所发生的各类状况的抽象表示。

在 Qt 中常见的事件类型如下:

1.用户输入事件:

1.鼠标事件:QMouseEvent 涵盖鼠标按下、释放、移动、双击等操作;QWheelEvent 处理鼠标滚轮滚动。

2.键盘事件:QKeyEvent 处理键盘按键的按下和释放。

2.窗口和控件事件:

1.窗口事件:QResizeEvent 在窗口大小改变时触发;QMoveEvent 窗口位置移动时产生;QCloseEvent 尝试关闭窗口时触发。

2.焦点事件:QFocusEvent 处理控件获得或失去焦点。

3.QShowEvent 和 QHideEvent 分别在窗口或控件显示和隐藏时触发;

4.绘制事件:QPaintEvent 在窗口或控件需重绘时触发,可进行自定义绘制。

5.定时器事件:QTimerEvent 由定时器触发,用于定时任务。

2.事件的传递

进入事件队列

事件产生后进入 Qt 应用的事件队列,主循环会依次从队列取事件处理。

传递规则

1.目标对象:事件先到与发生位置最相关的对象,如鼠标点击位置所在控件。

2.对象处理:目标对象用事件处理函数尝试处理,若处理(返回true)则传递结束;未处理(返回false)则传给父对象。

3.父对象及顶级窗口:父对象重复处理流程,若到顶级窗口仍未处理,事件通常被忽略。

特殊机制

事件过滤器:可让一个对象拦截处理其他对象的事件,事件先经其处理,处理了则不再传目标对象。

自定义事件:开发者创建发送,传递规则与系统事件相同,用QCoreApplication::postEvent()或QCoreApplication::sendEvent()发送。

事件立即发送

QCoreApplication::sendEvent() 能立即发送事件,事件不进队列,直接由目标对象处理。这是同步操作,调用后函数等待事件处理完成才返回。

Qt 中阻止事件向父类传递方法:

1.重写事件处理函数:返回 true 表示事件已处理,如:

1.调用 event->accept():标记事件已接受,可结合返回 true,如:

1.使用事件过滤器:安装过滤器并在 eventFilter 中返回 true 拦截,如:

核心函数

这个为虚函数

bool QApplication::notify(QObject *receiver, QEvent *e)

事件过程:

1、QApplication::exec 开启事件循环

2、QEventLoop::processEvents 从事件循环中取出事件并发送

3、 QCoreApplication::sendPostedEvents 发送事件

4、bool QApplication::notify(QObject *receiver, QEvent *e) 处理事件

(1)判断返回值, notify_helper && isAccepted() 时不再遍历父widget

5、notify_helper 函数执行逻辑

(1)先执行qApp安装的事件过滤器,即qApp->installEventFilter安装的。

(2)然后执行自己安装的事件过滤器,即this->installEventFilter安装的,

(3)Event。

6、QWidget::event 主要分发到各个处理函数,如mousePressEvent等。

相关推荐
第二只羽毛14 分钟前
C++ 高并发内存池1
大数据·开发语言·c++·开源
不想看见40422 分钟前
C++/Qt 实习岗位深度解析【结合一次研发实习谈感受】
开发语言·c++·qt
sjmaysee40 分钟前
Java框架SpringBoot(一)
java·开发语言·spring boot
寒秋花开曾相惜42 分钟前
(学习笔记)3.8 指针运算(3.8.3 嵌套的数组& 3.8.4 定长数组)
java·开发语言·笔记·学习·算法
想唱rap1 小时前
Linux线程
java·linux·运维·服务器·开发语言·mysql
Tony Bai1 小时前
Rust 看了流泪,AI 看了沉默:扒开 Go 泛型最让你抓狂的“残疾”类型推断
开发语言·人工智能·后端·golang·rust
njidf1 小时前
C++与Qt图形开发
开发语言·c++·算法
qwehjk20081 小时前
代码动态生成技术
开发语言·c++·算法
是翔仔呐1 小时前
第11章 显示外设驱动:I2C协议OLED屏、SPI协议LCD屏字符/图片/中文显示
c语言·开发语言·stm32·单片机·嵌入式硬件·学习·gitee
jason成都1 小时前
IoT 设备监控系统实战:基于 EMQX 的 MQTT 连接监控与数据格式指纹识别
开发语言·python