qt 中的物件樹

2022-06-13 08:21:16 字數 1037 閱讀 1330

本節內容講解了什麼是物件樹以及其所帶來的 gui 程式設計好處。最後說明了在物件樹中析構順序問題並舉了個特殊的例子,來說明平時程式設計中需要注意的乙個點。
我們常常聽到 qobject 會用物件樹來組織管理自己,那什麼是物件樹?

這個概念非常好理解。因為 qobject 類就有乙個私有變數 qlist,專門儲存這個類的子孫後代們。比如建立乙個 qobject 並指定父物件時,就會把自己加入到父物件的 childre() 列表中,也就是 qlist變數中。

好處就是:當父物件被析構時子物件也會被析構。

舉個例子,有乙個視窗 window,裡面有 label標籤、textedit文字輸入框、button按鈕這三個元素,並且都設定 window 為它們的父物件。這時候我做了乙個關閉視窗的操作,作為程式設計師的你是不是自然想到將所有和視窗相關的物件析構啊?古老的辦法就是乙個個手動 delete 唄。是不是很麻煩?qt 運用物件樹模式,當父物件被析構時,子物件自動就 delete 掉了,不用再寫一大堆的**了。

所以,物件樹在 gui 程式設計中是非常非常有用的。

正常情況下,最後被建立出來的會先被析構掉。就好比我有乙個大桌子,上面先擺放乙個盤子,再擺放乙個碗。當我要把桌子撤掉的時候,會先撤掉碗,再撤掉盤子,最後撤掉桌子。

用**來演示一下:

正常情況

int main()

後建立的 quit 物件指定了 window 為其父物件。那麼關閉程式時,會先呼叫它的析構函式,然後呼叫 window 的析構函式。

乙個特殊情況

int main()

如果反過來,由於 window 後建立,程式關閉時先呼叫 window 的析構函式(此時 quit 被第一次析構)。接著呼叫 quit 的析構函式(此時 quit 被第二次析構),這時由於被兩次析構,所以出問題了。

這種特殊情況在程式設計中很隱蔽,不容易發現。因為編譯的時候不會報錯,只有執行時才會產生問題。所以我們要保持良好的程式設計習慣以及對事物產生順序有科學的認知。

QT中的物件樹與物件擁有權

qobjects以物件樹組織它們自己。當你建立乙個qobject以另乙個物件作為其父物件時,這個qobject被加入到其父物件的children 列表中,當父物件對被刪除時,其子物件也會被刪除。實踐表明這種組織方式非常適合gui物件的特點與需要。舉例來說,乙個qshortcut 鍵盤快捷鍵 是其相關...

Qt 物件樹 《一》

分類 c c qobjects類以物件樹組織。建立的 qobjects 會自動新增到它的父物件的 childern 列表中,並且父物件被刪除時,子物件也會被刪除。這種方法很適合 gui物件。例如 qshortcut 是某個視窗的子物件,當使用者關閉這個視窗時,qshortcut 物件就會被刪掉。qq...

QT基礎知識(五)QT物件樹

qt使用物件樹來管理和組織object類或者及其所有子部件。當建立乙個object時,如果使用其他物件作為其父物件,那麼object就會被放置到其父物件的children 列表中。當父物件被銷毀時,這個object也會被銷毀。如下圖 設定樣式風格 brushcolor qt red 顏色 qdebu...