qt是半自动内存管理
1、当窗口有父窗口时,不需要自己delete
2、当窗口无父窗口时,如果设置了WA_QuitOnClose属性(默认自带),则窗口的closeEvent会被自动调用;但是这里有一个隐患,如果该窗口是最后一个关闭的,则主程序退出(主程序quitOnLastWindowClosed接口返回true,默认值为true),因此,如果窗口是顶层窗口,最好不要设置WA_QuitOnClose属性,防止程序退出。
一般顶层窗口可以设置如下:
setAttribute(Qt::WA_DeleteOnClose, true);
setAttribute(Qt::WA_QuitOnClose, false);
作为主程序退出的窗口需要设置setAttribute(Qt::WA_QuitOnClose, true);为了退出应用程序,然后重写closeEvent方法,可能代码如下:
1 if (m_ForceQuit == false) 2 { 3 setVisible(false); 4 if (isMinimized()) 5 { 6 setWindowState((windowState()/* | Qt::WindowActive*/) & ~Qt::WindowMinimized); 7 } 8 event->ignore(); 9 } 10 else 11 { 12 QWidget::closeEvent(event); 13 }
注意:WA_QuitOnClose和WA_DeleteOnClose是两个属性,帮助文档解释如下:

