首先了解這些對windows程式設計有更深入的理解,其實就是從qt在windwos上就是win32的擴充套件了一下,一般程式退出後,即使不delete你分配的記憶體,作業系統也會幫著**,qt有著半自動的**機制,為什麼是半自動呢?個人理解如下,qt中的一切事件,圖形等都是經過qobject派生出來的,每乙個qobject中都有乙個線性表,為什麼我會這麼理解呢?在寫程式的時候我們使用過findchild或者findchildren等 template..我就好奇了為什麼能找得出來,出於探求真理的目的,翻看了qobject。findchild原始碼如下:
template
//乙個簡單的模板函式,
inline t findchild(const qstring &aname = qstring(), qt::findchildoptions options = qt::findchildrenrecursively) const
經過測試要使用他們的話必先要指定parent();由此我就可以分析出,其實每指定乙個parent,就會幫你新增乙個結點,從整個程式來看,這樣就形成了一顆樹樹樹!!於是我又想到,qt為什麼推薦使用delete later,因為它可以幫你刪除線性表上的子孫啊~delete反而可能造成記憶體洩漏,但從測試程式看出,delele並沒有造成內在洩漏且孩子也都完整的銷毀了。區別就是delete不會傳送deferreddelete訊息,而deletelater要發。
一,在主視窗刪除的退出程式的時候,略有不同,大體是這樣乙個流程:
1)先給主視窗傳送乙個close 事件;
2)再傳送windowdeactivate(釋放視窗)
3)如果都顯示的話,兒子些全部都給我hide,hide的時候順序還有點怪,先從爹再從最小的兒子
4)最後再呼叫各自的析構就~順序有點不太能理解就是從都爹開始,孩子層級析構
二,普通的乙個object刪除大體是這樣的流程:
1)對刪除的目標傳送乙個deferreddelete事件,看文件說的是目標將被清除,當它整理好了後
2)如果都顯示的話,兒子些全部都給我hide,和上面那種一樣
3)再發乙個childremoved事件到它的爹那裡去。
4)呼叫各自的析構~
powered by:小烏龜在大烏龜背上
Qt 銷毀機制
首先了解這些對windows程式設計有更深入的理解,其實就是從qt在windwos上就是win32的擴充套件了一下,一般程式退出後,即使不delete你分配的記憶體,作業系統也會幫著 qt有著半自動的 機制,為什麼是半自動呢?個人理解如下,qt中的一切事件,圖形等都是經過qobject派生出來的,每...
Qt之銷毀機制
首先了解這些對windows程式設計有更深入的理解,其實就是從qt在windwos上就是win32的擴充套件了一下,一般程式退出後,即使不delete你分配的記憶體,作業系統也會幫著 qt有著半自動的 機制,為什麼是半自動呢?個人理解如下,qt中的一切事件,圖形等都是經過qobject派生出來的,每...
訊息列隊機制(個人理解)
歷史遺留 主線程不能被阻塞 問題 重新整理ui的 只能執行在主線程,執行在子執行緒是沒有任何效果的 解決問題 如果在子執行緒中重新整理ui,使用訊息列隊機制 提出方法 訊息列隊機制 looper一旦發現message queue中有訊息,就會把訊息取出,然後把訊息扔給handler物件,handle...