在Qt中,自定义事件的步骤大概如下:
1.创建自定义事件,自定义事件需要继承QEvent
2.使用QEvent::registerEventType()注册自定义事件类型,事件的类型需要在 QEvent::User 和 QEvent::MaxUser 范围之间,在QEvent::User之前是预留给系统的事件
3.使用sendEvent() 和 postEvent()发送自定义消息
4.接受自定义消息,通过重写 event、customEvent 或eventFilter来处理事件
自定义事件有很多应用场景,比如说从第三方库中回调过来的数据,如果要显示到界面上,需要在回调函数中将数据包装成事件发送出来,主线程接收到事件后解析数据并显示。下面是一个从第三方库获取视频帧并绘制到界面的例子。
QHFrameEvent.h
#ifndef QHFRAMEEVENT_H
#define QHFRAMEEVENT_H#include <QEvent>struct Frame
{uint8_t *buffer;int width;int height;
};class QHFrameEvent : public QEvent
{
public:explicit QHFrameEvent(Frame *frame);virtual ~QHFrameEvent();public:static void postEvent(QObject *obj, Frame *frame);static QHFrameEvent *