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