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