读书人

setAttribute(Qt:WA_DeleteOnClose)的

发布时间: 2012-10-18 13:46:55 作者: rapoo

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;
}

读书人网 >QT开发

热点推荐