1. 程式人生 > >Programming is a Job with Art

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(

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/。