这本书的例子

时间:2010-07-13 18:37:00

标签: c++ qt qt-creator

我有这段代码:

 #include <QApplication>
 #include <QFont>
 #include <QPushButton>
 #include <QWidget>

 class MyWidget : public QWidget
 {
 public:
     MyWidget(QWidget *parent = 0);
 };

 MyWidget::MyWidget(QWidget *parent)
     : QWidget(parent)
 {
     setFixedSize(200, 120);

     QPushButton *quit = new QPushButton(tr("Quit"), this);
     quit->setGeometry(62, 40, 75, 30);
     quit->setFont(QFont("Times", 18, QFont::Bold));

     connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
 }

 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
     MyWidget widget;
     widget.show();
     return app.exec();
 }

有人可以解释一下这行中到底发生了什么

MyWidget(QWidget *parent = 0);

有点难以理解这位父母是什么,提前谢谢

3 个答案:

答案 0 :(得分:8)

这是带有默认参数(NULL的构造函数的参数,因为NULL根据c ++标准定义为0。默认意味着不传递参数与传递NULL相同。

由于Qt的小部件是按层级系统排列的(父级 - >子级关系),因此父级是小工具,它是当前小工具的“所有者”或“容器”(NULL表示没有父级也称为根小部件)。对于GUI项目,窗口小部件通常将其包含的窗口小部件作为其父项。

这是有利的,因为当删除父项时,它将删除任何子项已经自动删除了对c ++附带的大量内存管理的需要。

答案 1 :(得分:1)

父参数用于为父母提供新的小部件。给定时,Qt管理对象树很有用。 (自动删除子对象。)它还具有将新窗口小部件“附加”到另一个窗口小部件(即父窗口)的具体可见效果。但是,在您的代码中,不会给出父参数,导致窗口小部件显示为顶级窗口,而不会被Qt自动删除。 (尽管如此,它不需要在Qt中删除。)

答案 2 :(得分:0)

它是一个0指针(认为没有类型的NULL),或者在Qt术语中,“没有父级”。