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過...