QMouseEvent会不会内存泄露
需求是这样的: 我在awidget里面接收了双击消息,然后我想在bwidget(awidget的父窗口)处理这个双击消息,但是我要把事件的pos的值修改一下,这样我就必须新new一个QMouseEvent,问题是,谁来删除这个QMouseEvent,如果不删除,会不会内存泄露呢?
[解决办法]
http://blog.csdn.net/wangkuiyun/article/details/7412379
[解决办法]
这是一个很有趣的问题,以前我也遇到过,没有留意,因为当时感觉,QEvent 并不是继承与QObject 不会有Qt提供的委托模式释放关系。但是没有留意。
今天我做了个实验。代码很简单,我用QtCreator 创建了一个GUI工程,只改了cpp部分 如下:
#include "MainWindow.h"#include "ui_MainWindow.h"#include <QEvent>#include <QDebug>class MyEvent : public QEvent {public: MyEvent(Type type); virtual ~MyEvent();};MyEvent::MyEvent(Type type) : QEvent(type) {}MyEvent::~MyEvent() { qDebug() << "delete here"; }MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); QEvent* e = new MyEvent((QEvent::Type)8848); qApp->postEvent(this, e); // 1 delete e; // 2}MainWindow::~MainWindow(){ delete ui;}
[解决办法]
这要看你是使用postEvent还是sendEvent
对于postEvent(这相当于异步)你必须在堆中创建event,因为Qt会接管event,并主动释放对象。
对于sendEvent(这相当于同步)建议你在栈中创建event,因为Qt不负责释放对象。
相关文档,请参考QCoreApplication里的postEvent和sendEvent部分