qt學習筆記(六)之簡析物件樹

2021-07-03 17:15:24 字數 1710 閱讀 4337

qt提供了一種機制,能夠自動、有效的組織和管理繼承自qobject的qt物件,這種機制就是物件樹。

qt物件樹在使用者介面程式設計上是非常有用的。它能夠幫助程式設計師減輕記憶體洩露的壓力。

比如說當應用程式建立了乙個具有父視窗部件的物件時,該物件將被加入父視窗部件的孩子列表。當應用程式銷毀父視窗部件時,其下的孩子列表中的物件將被一一刪除。這讓我們在程式設計時,能夠將主要精力放在系統的業務上,提高程式設計效率,同時也保證了系統的穩健性。

下面筆者將簡單分析物件樹。

1、[cpp]view plain

copy

intmain(

intargc, 

char

*argv)    

程式執行後的除錯資訊:

[plain]view plain

copy

dlg = qdialog(0x3ea1a0)  

btn =qpushbutton(0x3ea228)  

關閉視窗後,

[plain]view plain

copy

dlg = qdialog(0x3ea1a0)  

這說明關閉視窗,不會銷毀該視窗部件,而是將其隱藏起來。

我們在[plain]view plain

copy

qdebug() << "dlg = " << dlg;  

之後加上

[plain]view plain

copy

qdebug() << "btn = " << btn;  

明顯的,我們之前已經delete btn,btn指標沒有被賦值為0,這是編譯器決定的。

執行程式後,必然出現段錯誤。

2、將程式稍微修改下。

[cpp]view plain

copy

intmain(

intargc, 

char

*argv)    

關閉視窗後,應用程式出現段錯誤了,這很好的說明了物件樹的機制。當銷毀了btn的父視窗部件,btn也會被銷毀。

3、物件樹對應的是父視窗部件和子視窗部件。像布局管理器新增部件是沒有把新增的部件加入到孩子列表

[cpp]view plain

copy

intmain(

intargc, 

char

*argv)  

list = layout->children();  

qdebug() << "layout children"

;  for

(int

i = 0; i < list.size(); i++)  

dlg->exec();  

return

0;  

}  

執行程式後,出現的除錯資訊如下

[plain]view plain

copy

dlg children   

qpushbutton(0x3e98f8)   

qhboxlayout(0x3e9b28)   

layout children  

layout 的孩子列表是空的。

qt學習筆記(六)之簡析物件樹

qt提供了一種機制,能夠自動 有效的組織和管理繼承自qobject的qt物件,這種機制就是物件樹。qt物件樹在使用者介面程式設計上是非常有用的。它能夠幫助程式設計師減輕記憶體洩露的壓力。比如說當應用程式建立了乙個具有父視窗部件的物件時,該物件將被加入父視窗部件的孩子列表。當應用程式銷毀父視窗部件時,...

Python學習筆記之exec函式簡析

個人部落格,支援一下唄!本文首發於ray s blog exec 函式的作用 動態執行python 也就是說exec 可以執行複雜的python 而不像eval 函式那樣只能計算乙個表示式的值。舉乙個簡單的小例子,如下 i 12 j 13 exec answer i j print answer i...

LWIP學習筆記 2 ARP簡析

arp分組格式 乙太網目的位址 mac 乙太網源位址 mac 幀型別硬體型別 協議型別 op傳送端目的位址 傳送端 位址 目的乙太網位址 目的 位址 6 位 62 2211 2646 4幀型別 請求 應答 此字段為0x0806 協議型別 arp請求,arp應答,rarp請求,4rarp應答 arp過...