我正在关注Qt Tutorials并得到一个简单的问题

时间:2010-05-12 13:36:15

标签: qt constructor qt4 colon

如果我想创建自己的继承自QWidget

的MyWidget类

教程告诉我写这样的构造函数......

MyWidget::MyWidget(QWidget *parent)
: QWidget(parent){....}

我想知道它的作用是什么:QWidget(parent)

是否意味着显式调用QWidget的构造函数?

4 个答案:

答案 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遵循此约定。所以,在这里你传递一个指向它的基类构造函数的指针,所以它可以将它存储在它的一个成员变量中。