Qt 的小部件,尤其是在组合它们时,定义了一个层次结构。让我们用一个(简化的)示例直观地看一下这个。
在我的应用程序中,我有一个中央 QWidget。最重要的是另外两个小部件。用于一些 3D 渲染的 QGLWidget 和用于控件的 QTabWidget。这两个小部件是我的中央 QWidget 的孩子。
QTabWidget 有标签,它们本身就是 QWidget。让它们成为 QTabWidget 的孩子似乎是合乎逻辑的,对吧?
我可以继续。也许其中一个选项卡有一些按钮,另一个选项卡有一些文本字段,等等。
您在这里所做的是创建 QWidget 的层次结构。所以在这个例子的情况下,它看起来有点像这样:
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 本身就是最顶层的小部件。但它也可以很容易地成为层次结构的一部分。
相当多的文字,但我希望它能稍微解释一下这些概念。看看 Qt 附带的一些示例。您应该了解事物的结构。如果您看不到它们是如何连接的,请按照我上面所做的那样绘制图表。它应该开始对你有意义。如果有人有更正或更多可能有用的技术见解,请随时评论或纠正我。
希望有帮助。