QT之對象父子關系
阿新 • • 發佈:2018-03-29
QT 父子對象 2、將自己的 children list 中的所有對象銷毀
這時我們就要註意了,在銷毀時可能會存在多次銷毀的問題!
我們所講的對象一定得是Qt對象,就是繼承自QObject的或是QWidget的,不是隨便的C++中的對象。
利用Qt對象間的父子關系可以構成對象樹,刪除樹中的節點會導致對應的子樹被銷毀。
我們實現一個這樣的樹:
我們實現的代碼如下:
得到的結果如下:
我們可以看到調用析構函數的有 obj3 和 obj4,因為 obj4 是 obj3 的子對象,所以 delete obj3 時,obj4 也被析構了。這時 obj1 的子對象鏈表裏只有 obj2 一個對象了。
通過今天的實驗,我們得知Qt對象間可以存在父子關系,並且通過父子關系可以得到Qt對象樹;Qt對象銷毀時解除和父對象間的父子關系,Qt對象銷毀時將會銷毀所有的子對象。好了,今天就先學到這裏,後面我們繼續學習Qt的相關知識。
QT對象間可以存在父子關系:
1、每一個對象都保存有它所有子對象的指針
2、每一個對象都有一個指向其父對象的指針
其關系如下圖所示:
當指定QT對象的父對象時,其父對象會在子對象鏈中表中會加入該對象的指針,該對象會保存指向其父對象的指針。
我們在QT中創建了3個 QObject 對象,我們讓 c1、c2 的父對象指向 p,那麽我們打印 c1 和 c2 的地址以及 p 的子對象鏈表裏的地址。如下所示:
打印的結果如下:
事實證明了確實如我們所想的那樣,QT對象間可以存在父子關系。
那麽當Qt對象被銷毀時,又會是怎樣的情況呢?
1、將自己從父對象的 children list 移除
這時我們就要註意了,在銷毀時可能會存在多次銷毀的問題!
我們所講的對象一定得是Qt對象,就是繼承自QObject的或是QWidget的,不是隨便的C++中的對象。
利用Qt對象間的父子關系可以構成對象樹,刪除樹中的節點會導致對應的子樹被銷毀。
我們實現一個這樣的樹:
我們實現的代碼如下:
得到的結果如下:
我們可以看到調用析構函數的有 obj3 和 obj4,因為 obj4 是 obj3 的子對象,所以 delete obj3 時,obj4 也被析構了。這時 obj1 的子對象鏈表裏只有 obj2 一個對象了。
通過今天的實驗,我們得知Qt對象間可以存在父子關系,並且通過父子關系可以得到Qt對象樹;Qt對象銷毀時解除和父對象間的父子關系,Qt對象銷毀時將會銷毀所有的子對象。好了,今天就先學到這裏,後面我們繼續學習Qt的相關知識。
以上內容來自狄泰軟件學院的QT教程,歡迎大家一起來學習,可以加我QQ:243343083,一起學習。狄泰技術交流群:199546072
QT之對象父子關系