如果我想创建自己的继承自QWidget
的MyWidget类教程告诉我写这样的构造函数......
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent){....}
我想知道它的作用是什么:QWidget(parent)
是否意味着显式调用QWidget的构造函数?
答案 0 :(得分:5)
是。在C ++中,如果您希望它运行,则必须在构造函数的initialization list中显式调用基类的构造函数。在这种情况下,在构造函数中运行代码之前将运行QWidget(parent)
。顺便说一句,这不仅仅是一个Qt的东西,而且在C ++继承中很常见。
答案 1 :(得分:2)
除了上一个答案:
1就像之前提到的那样,如果父级不为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
答案 2 :(得分:0)
从"yours" Qt教程:因为这个类继承自QWidget,所以新类是一个小部件,可能是顶级窗口或子窗口小部件(如前一章中的QPushButton)< / em>的。
祝你好运!答案 3 :(得分:0)
这在C ++中称为初始化列表,是的,它是对QWidget构造函数的显式调用。默认情况下,C ++调用其基类构造函数的无参数版本,除非在初始化列表中有显式调用。通常认为良好的设计是类的成员的初始化由该类的构造函数处理 - Qt遵循此约定。所以,在这里你传递一个指向它的基类构造函数的指针,所以它可以将它存储在它的一个成员变量中。