Qt中postevent造成内存泄漏问题的通用解决方案

在Qt中由QCoreApplication统一管理Qt事件的收发和销毁,其中sendEvent为阻塞式发送,用于单线程的事件发送;postevent为非阻塞式发送,构造事件的线程和接受事件的线程可以为两个线程。

最近在做一个个人项目ShaderLab

Qt中postevent造成内存泄漏问题的通用解决方案_第1张图片

需要绘制OpenGL实时渲染的图像,由于OpenGL渲染基本都放在循环语句内,直接放在主线程会导致界面卡死不响应,所以考虑另开一个线程在后台渲染,再把渲染好的图像在循环语句内通过postevent发送给前端的Widget

Qt中postevent造成内存泄漏问题的通用解决方案_第2张图片

 因此要想QCoreApplication注册一个QEvent类型,通过该类型的成员变量保存Image数据

//EvSendFrame.h

#include 

class EvSendFrame : public QEvent
{
public: 
	EvSendFrame(void* frameData,int size);
	~EvSendFrame();
	static Type eventType;

public:
	uchar* _framedata;
};

#endif
//EvSendFrame.cpp

#include "EvSendFrame.h"

你可能感兴趣的:(QT,qt,踩坑,Qt事件)