пример из книги - PullRequest
       7

пример из книги

2 голосов
/ 13 июля 2010

У меня есть этот фрагмент кода:

 #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 ]

8 голосов
/ 13 июля 2010

Это аргумент конструктора с аргументом по умолчанию (NULL, поскольку NULL определяется как 0 в соответствии со стандартом c ++). Значение по умолчанию, передающее без параметра, равнозначно передаче NULL.

Поскольку виджеты Qt расположены в иерархической системе (родитель -> дочерние отношения), родительский виджет - это «владелец» или «контейнер» текущего (NULL означает, что родитель не является корневым виджетом рода ). Для элементов графического интерфейса виджет часто будет иметь виджет, в котором он содержится, в качестве родителя.

Это выгодно, поскольку при удалении родителя удаляются все дочерние элементы, которые автоматически устраняют необходимость в большей части управления памятью, которая поставляется с c ++.

1 голос
/ 13 июля 2010

Аргумент parent предназначен для предоставления родителям новых виджетов.Когда дано, Qt полезно управлять деревом объектов.(Для автоматического удаления дочерних объектов.) Он также имеет конкретный видимый эффект «прикрепления» нового виджета к другому виджету (то есть к родительскому).Однако в вашем коде родительский аргумент никогда не указывается, поэтому виджет отображается как окно верхнего уровня и не удаляется Qt автоматически.(Это не потребует удаления Qt в любом случае в этом коде.)

0 голосов
/ 13 июля 2010

Это указатель 0 (думайте NULL без типа), или в терминах Qt, "нет родителя".

...