QObjects以對象樹組織它們自己。當(dāng)你創(chuàng)建一個(gè)
QObject以另一個(gè)對象作為其父對象時(shí),這個(gè)
QObject被加入到其父對象的children()列表中,當(dāng)父對象對被刪除時(shí),其子對象也會被刪除。實(shí)踐表明這種組織方式非常適合GUI對象的特點(diǎn)與需要。舉例來說,一個(gè)
QShortcut(鍵盤快捷鍵)是其相關(guān)窗口的孩子,因此當(dāng)用戶關(guān)掉那個(gè)窗口時(shí),這個(gè)快捷鍵也隨之刪除了。
QWidget,是所有屏幕可顯示的一切事物的基類,它擴(kuò)展了這種父子關(guān)系。在這種關(guān)系下,孩子通常就是一個(gè)子窗口部件,也就是說,它被顯示在父窗口的坐標(biāo)系中,會因?yàn)楦复翱诘倪吔缂s束而被裁剪。舉例來講,當(dāng)應(yīng)用程序關(guān)閉一個(gè)消息框時(shí),消息框會被刪除,消息框里的按紐與標(biāo)簽也會被隨之刪除,這正是我們所想的,因?yàn)榘粹o與標(biāo)簽是消息框的孩子。
你也可以親自刪除孩子對象,這些子對象會與其父對象脫離關(guān)系。舉例來說,當(dāng)用移除了一個(gè)工具欄,它導(dǎo)致應(yīng)用程序刪除這個(gè)
QToolBar 對象,這時(shí)這個(gè)工具欄的父對象
QMainWindow察覺到了變化,會相應(yīng)地重新配置其屏幕空間。
調(diào)試函數(shù),
QObject:
dumpObjectTree()與
QObject::
dumpObjectInfo()非常有用,當(dāng)一個(gè)應(yīng)用程序行為怪異,讓你手足無措時(shí),你應(yīng)該想到也許需要它們幫忙。
有了以上知識后,你再看到了某些代碼只
new出來一個(gè)對象,而不再
delete的做法,就會心平氣和些了。
posted on 2007-09-25 20:36
清源游民 閱讀(2404)
評論(0) 編輯 收藏 引用 所屬分類:
Qt