QWidget *parent 作为用户定义类的构造函数中的参数



在我之前的帖子中,这里的人们告诉我,每个小部件都有一个父小部件,这有助于删除,即当父小部件被删除时,子小部件会自动被扔到/dev/null。

现在我看到QWidget *parent被传递给用户定义类的构造函数,在这个链接中:http://doc.qt.io/archives/qt-4.7/tutorials-addressbook-part1.html 类通讯录:公共QWidget { Q_OBJECT

 public:
     AddressBook(QWidget *parent = 0);
 private:
     QLineEdit *nameLine;
     QTextEdit *addressText;
 };

这说明什么?

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,你将了解布局。将布局设置为小部件将影响该小部件的所有子项。还有其他几个原因(以及幕后发生的事情),但现在应该足够了。

我的解释是相当概念性的。也许这不是技术上最详细和最正确的解释,但它应该给你一些指示。

回到您的代码示例。地址簿派生自QWidget。如果将其放在 GUI 中,则可能需要将其放在另一个 Widget 的顶部。作为它的孩子。因此,如果您添加此地址簿,则可以告诉它其父级是什么。在此示例中,未使用它。地址簿本身是最上面的小部件。但它也很容易成为层次结构的一部分。

相当多的文字,但我希望它能在一定程度上解释这些概念。看看Qt附带的一些示例。你应该了解事物的结构。如果您没有看到它们是如何连接的,请按照我上面所做的那样绘制图表。它应该开始对你有意义。如果有人有更正或可能有用的更多技术见解,请随时评论或纠正我。

希望有帮助。

构造函数在小部件之间建立父子关系。

除了内存管理和组织(这对普通QObjects也有效)和布局(这不是强制性的 - 你可以在父小部件的布局之外有子小部件),父子关系对QWidgets来说是一个有趣的转折:

任何没有父级的QWidget都会成为一个窗口,并且在大多数平台上都会列在桌面的任务栏中。

(摘自Qt 4.7文档的窗口和对话框小部件。

相关内容

  • 没有找到相关文章

最新更新