在我之前的帖子中,这里的人告诉我,每个小部件都有一个父级,它有助于删除,即当父级被删除时,子级会被自动抛出到/ dev / null。
现在我在这里看到 QWidget * parent 传递给用户定义的类的构造函数:http://doc.qt.io/archives/qt-4.7/tutorials-addressbook-part1.html class AddressBook:public QWidget { Q_OBJECT
public:
AddressBook(QWidget *parent = 0);
private:
QLineEdit *nameLine;
QTextEdit *addressText;
};
这表明了什么?
答案 0 :(得分:3)
Qt的小部件,特别是在组合它们时,定义了一个层次结构。让我们用(简化的)例子直观地看一下。
在我的应用程序中,我有一个中央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附带的一些样本。你应该知道事情的结构。如果您没有看到它们如何连接,请按照上面的描述绘制图表。它应该开始对你有意义。如果有人有更正或更有用的技术见解,请随时评论或纠正我。
希望有所帮助。
答案 1 :(得分:1)
构造函数建立小部件之间的父子关系。
除了内存管理和组织(对于简单的QObject也有效)和布局(这不是必需的 - 你可以在父布局之外设置子窗口小部件),父子关系对QWidgets采取了一个有趣的转折:
任何没有父级的QWidget都将成为一个窗口,并且在大多数平台上都会列在桌面的任务栏中。
(取自Window and Dialog Widgets,Qt 4.7文件。)