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