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是兩個屬性,幫助文檔解釋如下: