1. 程式人生 > >Qt中delete和deleteLater()的使用區別事例之QMenu關閉父介面

Qt中delete和deleteLater()的使用區別事例之QMenu關閉父介面

delete是C++的關鍵字識別符號,而deleteLater是QT中特有的,繼承QObject的類都擁有該方法。兩者主要區別是delete會馬上銷燬目標物件的,而並沒有將物件立即銷燬,而是向主訊息迴圈傳送了一個event,下一次主訊息迴圈收到這個event之後才會銷燬物件。

開發中有一個需求是彈出一個QMenu,其中一個選單項是要關閉掉介面。我直接在槽函式裡面呼叫了介面的close方法並直接用 delete 對介面進行銷燬。然後就出現問題了,因為介面被銷燬,相應的子控制元件也都會被銷燬。而這就相當於 QMenu物件在自己的方法中將自己銷燬了(我不確定是否是這個原因導致的問題)。銷燬程式碼執行以後一直都會異常,我以為是QMenu的問題,花了我接近一天的時間去改,都不行。後面靈光一閃,使用deleteLater試看看,然後就通過了。介面不使用delete銷燬而使用deleteLater(),就可以讓物件的方法順利執行完畢。而又不擔心物件沒有銷燬而佔用記憶體。