如果我想创建自己的类 MyWidget 继承自 QWidget
教程告诉我写这样的构造函数......
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent){....}
我想知道它的作用是什么:QWidget(parent)
这是否意味着显式调用 QWidget 的构造函数?
如果我想创建自己的类 MyWidget 继承自 QWidget
教程告诉我写这样的构造函数......
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent){....}
我想知道它的作用是什么:QWidget(parent)
这是否意味着显式调用 QWidget 的构造函数?
是的。在 C++ 中,如果您希望它运行,则必须在构造函数的初始化列表中显式调用基类的构造函数。在这种情况下,QWidget(parent)
将在运行构造函数中的代码之前运行。顺便说一句,这不仅仅是 Qt 的事情,而且在 C++ 继承中很常见。
除了上一个答案:
1 就像提到的,如果 parent 不为 null,您的小部件将仅在父小部件内呈现。
2 如果父小部件被删除,您的所有子小部件也将被删除操作员删除。
默认小部件构造函数的正确实现应该如下:
class MyWidget: public QWidget {
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = 0);
}
MyWidget::MyWidget(QWidget *parent = 0): QWidget(parent) {
// Your own initialization code
}
尽量避免为堆栈小部件指定非零父级。您最好始终以以下方式创建嵌套小部件:
QWidget *parentWidget;
MyWidget myWidget = new MyWidget(parentWidget);
你可以在这里阅读更多:http: //doc.trolltech.com/4.6/objecttrees.html
来自“你的” Qt 教程:因为这个类继承自 QWidget,所以新类是一个小部件,可能是顶级窗口或子小部件(如上一章中的 QPushButton)。
祝你好运!
这在 C++ 中称为初始化列表,是的,它是对 QWidget 构造函数的显式调用。默认情况下,C++ 调用其基类构造函数的无参数版本,除非在初始化列表中有显式调用。通常认为类成员的初始化由该类的构造函数处理是好的设计 - Qt 遵循此约定。因此,在这里您传递了一个指向其基类构造函数的指针,因此它可以将其存储在其成员变量之一中。