首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

setAttribute(Qt:WA_DeleteOnClose)的原理,该如何解决

2012-10-18 
setAttribute(Qt::WA_DeleteOnClose)的原理class MainWindow构造函数中增加:setAttribute(Qt::WA_DeleteO

setAttribute(Qt::WA_DeleteOnClose)的原理
class MainWindow;构造函数中增加:setAttribute(Qt::WA_DeleteOnClose)以后,

C/C++ code
MainWindow mainWindow;mainWindow.setGeometry(30,30,1024,768);mainWindow.show();

当关闭mainWindow时候,会有异常。改成:
C/C++ code
    MainWindow* mainWindow = new MainWindow;    mainWindow->setGeometry(30, 30, 1024, 768);    mainWindow->show();

这样才可以,原因就是前者定义在栈上,后者定义在堆上,所以当设置了WA_DeleteOnClose以后,调用MainWindow析构函数才不会异常抛出。
setAttribute(Qt::WA_DeleteOnClose) 什么原理,有没有人研究过源码?

[解决办法]
这个是比较容易理解的,从名字上就能猜个差不多:Qt::WA_DeleteOnClose,当调用close()时,会对该对象的指针调用 delete pObj; 

当然,看源码也很简单,打开 qwidget.cpp ,搜索 close() 函数就行了
[解决办法]
这个应该没什么神奇的吧?

class A
{
public:
A(){}

void deleteMe()
{
delete this;
}
};

int main()
{
A * a = new A;
a->deleteMe();
return 0;
}

热点排行