Qt 自定义事件的发送与处理

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

一、postEvent方式发送处理自定义事件

1、基本流程

(1)、自定义事件类型

  • Qt 中有时需要用到自定义的事件,此时需要先自定义一个事件对应的枚举类型QEvent::Type
  • Qt允许的自定义事件取值范围在 QEvent::UserQEvent::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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值