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