Для чего нужны `(QWidget * pobj = 0)` и `(QWidget * pwgt / * = 0 /)`? - PullRequest
0 голосов
/ 22 января 2020

Я только начал изучать QT. Не могу понять, как работают эти конструкторы. Например:

//Progress.h
#include<QtWidgets>
class QProgressBar;
class Progress:public QWidget{
Q_OBJECT
private:
QProgressBar* m_pprb;
int step;
public:
Progress(QWidget* pobj=0);
public slots:
void slotStep();
void slotReset();
//

//Progress.cpp
#include<QtWidgets>
#include"Progress.h"
 Progress::Progress(QWidget* pwgt/*=0*/):QWidget(pwgt)
{
//some buttons
}

Итак, вопрос в том, что происходит в конструкторах?

1 Ответ

2 голосов
/ 22 января 2020

Создается класс Progress, который наследуется от QWidget .

Класс QWidget может принимать аргумент parent, если вы посмотрите в документации:

Создает виджет, который является потомком родителя, с флагами виджетов, установленными в f. Если parent равен nullptr, новый виджет становится окном. Если parent - это другой виджет, этот виджет становится дочерним окном внутри parent. Новый виджет удаляется при удалении его родителя.

Этот parent в вашем коде называется pwgt (я бы подумал, что это означает parentWidget)

Что вы делаете, создаете аргумент по умолчанию для вашего конструктора, для которого в качестве автоматического c устанавливается значение 0:

Progress(QWidget* pobj=0);

Очиститель может быть (для удобства со стандартом Qt):

Progress(QWidget* parent=nullptr);

Итак, зачем вам нужен конструктор, чтобы он выглядел так?
Это та же самая причина, которая обозначает QWidget:
Вы можете установить родительский виджет, но вы не должны!
Класс QWidget справится с вами, независимо от того, установлен родитель или нет.

...