Qt的Widgets,特別是在組合它們時,定義了一個層次結構。我們用一個(簡化的)例子來看這個。
在我的應用程序中,我有一箇中央QWidget。最重要的是另外兩個小部件。用於某些3D渲染的QGLWidget和用於控件的QTabWidget。這兩個小部件是我的中央QWidget的孩子。
QTabWidget有選項卡,它們是QWidgets本身。那些QTabWidget的孩子似乎是合乎邏輯的,對嗎?
我可以繼續。也許其中一個標籤有一些按鈕,另一個標籤一些文本框,不管。
你在這裏做的是創建一個QWidgets層次結構。所以在這個例子的情況下,它會看起來像這樣:
QWidget (the Central Widget)
|
|-QGLWidget (my rendering window)
|-QTabWiget (the tab widget for my controls)
|
|-QWidget (the first tab)
||
||-QPushButton (a button on the first tab)
|
|-QWidget (the second tab)
|
|-QLineEdit (a widget to provide some input)
無論如何,你趕上我的漂移。 回到你的代碼,你可以通過QWidget的構造函數(或任何派生的窗口小部件)來定義這個層次結構。如果我創建了我的QGLWidget,那麼在它的構造函數中,我將提供一個指向我的中心QWidget的指針作爲它的父類。
這個層次結構有幾個原因。你提到了創建/刪除。但也想象一下,如果你切換標籤。該選項卡頂部應顯示哪些元素?它的孩子當然。如果你開始使用Qt,你會學習佈局。將佈局設置爲小部件將影響該小部件的所有子項。還有其他幾個原因(事情發生在幕後),但現在這應該足夠了。
我的解釋是相當概念化的。也許這不是技術上最詳細和最正確的解釋,但它應該給你一些指示。
回到你的代碼示例。 AddressBook來自QWidget。如果你把它放在你的GUI中,你可能想把它放在另一個Widget之上。作爲它的孩子。所以如果你添加這個AddressBook,你可以告訴它它的父母是什麼。在這個例子中它沒有被使用。 AddressBook本身就是最頂級的部件。但它可以輕鬆地成爲層次結構的一部分。
相當多的文字,但我希望它有點解釋的概念。看看Qt附帶的一些示例。你應該知道事情的結構。如果您沒有看到它們的連接方式,請按照上述步驟繪製圖表。它應該開始對你有意義。如果有人有更正或更多的技術洞察可能是有用的,請隨時評論或糾正我。
希望有所幫助。
只是一個簡單的問題:你瞭解Qt的父子關係?也就是說,小工具通常如何彼此「連接」? – Bart 2011-05-10 10:12:40
感謝您的回覆,我只理解上面提到的內容。當父母被刪除時,孩子也被拋出,這就是我所理解的。現在這與上面用戶定義的類有什麼關係? – 2011-05-10 10:15:50