Qt 发送自定义事件

本文介绍了Qt中如何发送自定义事件,包括阻塞型和非阻塞型的事件发送方式,以及如何处理自定义事件。重点讲解了sendEvent和postEvent的区别,自定义事件类的创建,以及处理自定义事件的两种方法:事件过滤器和重写event()函数。

前言

最近自己发送自定义事件,发现用postEvent的时候,自定义中的变量指针会编程野指针,这是个很恐怖的事情,后面查阅资料分析才搞定这个问题。

正文

Qt中可以在程序中自主发送事件

  • 阻塞型事件发送

    事件发送后需要等待事件处理完成

  • 非阻塞型事件发送

    事件发送后立即返回

    事件被发送到事件队列中等待处理

QApplication类提供了支持事件发送的静态成员函数

-阻塞型发送函数:

bool sendEvent(QObject* receiver,QEvent* event);

-非阻塞型发送函数:

该问题为**代码型**问题。 ## 代码概述 问题要求使用Qt编写自定义事件。在Qt中,自定义事件可以通过继承`QEvent`类并定义自己的事件类型来实现,然后通过`QApplication::sendEvent()`或`QApplication::postEvent()`方法发送事件。 ## 代码解析 以下是一个使用Qt编写自定义事件的示例代码: ```cpp #include <QApplication> #include <QEvent> #include <QObject> #include <iostream> // 自定义事件类型 class MyCustomEvent : public QEvent { public: static const QEvent::Type MyEventType; // 自定义事件类型声明 MyCustomEvent() : QEvent(MyEventType) {} // 构造函数 }; // 初始化自定义事件类型 const QEvent::Type MyCustomEvent::MyEventType = static_cast<QEvent::Type>(QEvent::registerEventType()); // 接收事件的对象 class EventHandler : public QObject { protected: bool event(QEvent *event) override { if (event->type() == MyCustomEvent::MyEventType) { std::cout << "自定义事件被触发!" << std::endl; return true; } return QObject::event(event); } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); EventHandler handler; MyCustomEvent customEvent; // 发送自定义事件 QApplication::sendEvent(&handler, &customEvent); return app.exec(); } ``` ### 解释: 1. **定义自定义事件类**:继承`QEvent`类,并通过`QEvent::registerEventType()`注册自定义事件类型。 2. **重写事件处理函数**:通过继承`QObject`并重写`event()`方法来捕获和处理自定义事件。 3. **发送事件**:使用`QApplication::sendEvent()`立即发送事件,或者使用`QApplication::postEvent()`将事件放入事件队列中。 ## 知识点 1. **事件系统**:Qt事件系统允许用户定义和处理事件。 2. **继承QEvent**:通过继承`QEvent`类实现自定义事件类型。 3. **重写event方法**:通过重写对象的`event()`方法来捕获和处理事件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fu_Lin_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值