在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
-
- 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 *