一、postEvent方式发送处理自定义事件
1、基本流程
(1)、自定义事件类型
- Qt 中有时需要用到自定义的事件,此时需要先自定义一个事件对应的枚举类型
QEvent::Type。 - Qt允许的自定义事件取值范围在
QEvent::User与QEvent::MaxUser之间,即值在:1000 ~ 65535之间(包含两端值)。 - 自定义事件的取值可以用
QEvent::User来加一个数字表示,最后必须要将其转换成QEvent::Type类型的。如自定义一个值为 1001的事件,可以使用如下方式:
#define SELF_BTN_EVENT QEvent::Type(QEvent::User+0001)
(2)、发送自定义的事件postEvent
- 使用
QApplication::postEvent函数来发送自定义的事件到指定的对象上。其参数包括:事件的接收对象、发送的事件以及事件的优先级。 - 参数发送的事件在此因为必须要分配到堆上的,所以只能通过
new的方式来进行创建,而不能创建在栈上。 - 事件的优先级默认值为正常的优先级,一般会采用默认值。
- 通过该方式发送事件后,事件队列就会拥有该事件,并立即删除创建时所
new的事件。因此在发送事件之后,再访问该事件是不安全的,因为已经被自动的delete了。 - 该函数是线程安全的。
(3)、接收处理自定义的事件customEvent
- 使用
customEvent(QEvent *event)函数来接收postEvent所发送的自定义事件。 - 通过重写虚函数
customEvent(QEvent *event),来对指定的自定义事件进行处理。
2、应用示例
(1)、示例说明
点击按钮开始计时,当数字到10的时候,开始触发自定义事件,来显示时间到。
(2)、代码及效果如下
/*********** Pr05_QtEvent.h *************/
#pragma once
#include <QtWidgets/QWidget>
#include "ui_Pr05_QtEvent.h"
#include <QEvent>
#include <QTimer>
class Pr05_QtEvent : public QWidget
{
Q_OBJECT
public

博客介绍了Qt中发送处理自定义事件的两种方式。首先阐述了第一种方式的基本流程,包括自定义事件类型、发送和接收处理事件,还给出应用示例;接着说明第二种方式与第一种基本相同,主要区别在于事件创建位置、同步异步及事件删除情况,同样给出应用示例。
最低0.47元/天 解锁文章
138

被折叠的 条评论
为什么被折叠?



