1. 程式人生 > >QT之對象父子關系

QT之對象父子關系

QT 父子對象

QT對象間可以存在父子關系: 1、每一個對象都保存有它所有子對象的指針 2、每一個對象都有一個指向其父對象的指針 其關系如下圖所示:

技術分享圖片
當指定QT對象的父對象時,其父對象會在子對象鏈中表中會加入該對象的指針,該對象會保存指向其父對象的指針。
我們在QT中創建了3個 QObject 對象,我們讓 c1、c2 的父對象指向 p,那麽我們打印 c1 和 c2 的地址以及 p 的子對象鏈表裏的地址。如下所示:
技術分享圖片
打印的結果如下:
技術分享圖片
事實證明了確實如我們所想的那樣,QT對象間可以存在父子關系。
那麽當Qt對象被銷毀時,又會是怎樣的情況呢?
1、將自己從父對象的 children list 移除

2、將自己的 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之對象父子關系