版權所有。轉載請註明來源:http://besteam.im/blogs/article/60/。
Qt內關於窗口的刪除是一個複雜的事情。接下來詳細地講一講。
當我們創建一個窗口時,如果這個窗口是一個頂級窗口,準確地說是w.windowFlags().testFlag(Qt.Window) is True的窗口,Qt會自動附加一個Qt.WA_QuitOnClose屬性。它的意思是,窗口被關閉了,qApp.lastWindowClose信號會被觸發。
默認情況下,qApp接收到此信號後會退出程序,這個行爲相當於在初始化程序時:
qApp.lastWindowClosed.connect(qApp.quit)
要修改這個默認行爲,可以設置QApplication的quitOnLastWindowClosed屬性,比如:
qApp.setQuitOnLastWindowClosed(False)
通常,用戶可以點擊窗口的關閉按鈕關閉窗口,或者當系統關閉的時候,窗口也會被關閉。我們可以通過重載窗口的closeEvent()函數控制關閉動作,比如詢問用戶要不要保存文檔,或者只是最小化窗口。下面是一個例子:
def closeEvent(self, event):
if self.maybeSave():
self.saveSettings():
event.accept()
else:
event.ignore()
我們也可以在菜單裏設置一個退出命令,點擊它的時候調用窗口的close()函數即是關閉窗口。
關閉窗口之後,通過我們還要手動銷燬這個窗口,釋放它所佔用的內存。對此Qt提供了一個簡便的辦法,只要將窗口的Qt.WA_DeleteOnClose屬性設置爲true,Qt會自動幫我們銷燬這個窗口。
標題無“轉載”即原創文章,版權所有。轉載請註明來源:http://besteam.im/blogs/article/60/。