(轉載)Qt窗體關閉時,如何自動銷燬窗體類對象

版權所有。轉載請註明來源: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/。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章