在Qt中由QCoreApplication统一管理Qt事件的收发和销毁,其中sendEvent为阻塞式发送,用于单线程的事件发送;postevent为非阻塞式发送,构造事件的线程和接受事件的线程可以为两个线程。
最近在做一个个人项目ShaderLab
需要绘制OpenGL实时渲染的图像,由于OpenGL渲染基本都放在循环语句内,直接放在主线程会导致界面卡死不响应,所以考虑另开一个线程在后台渲染,再把渲染好的图像在循环语句内通过postevent发送给前端的Widget
因此要想QCoreApplication注册一个QEvent类型,通过该类型的成员变量保存Image数据
//EvSendFrame.h
#include <QEvent>
class EvSendFrame : public QEvent
{
public:
EvSendFrame(void* frameData,int size);
~EvSendFrame();
static Type eventType;
public:
uchar* _framedata;
};
#endif
//EvSendFrame.cpp
#include "EvSendFrame.h"