setAttribute(Qt:WA_DeleteOnClose)的原理,该如何解决
setAttribute(Qt::WA_DeleteOnClose)的原理class MainWindow构造函数中增加:setAttribute(Qt::WA_DeleteO
setAttribute(Qt::WA_DeleteOnClose)的原理
class MainWindow;构造函数中增加:setAttribute(Qt::WA_DeleteOnClose)以后,
C/C++ codeMainWindow 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;
}