Путаница в списке инициализации Qt C ++ - PullRequest
4 голосов
/ 19 сентября 2011

Я начинаю работать с Qt (и C ++, в меньшей степени), и я хотел убедиться, что полностью понял базовый код, прежде чем продолжить.Я понимаю, что первый элемент в списке инициализации используется для выбора наследуемого конструктора не по умолчанию.

Какова цель пользовательского интерфейса (new Ui :: TestAppMain)?Мне кажется, что это был бы бесконечный цикл, поскольку в конструкторе для пользовательского интерфейса устанавливается новый экземпляр TestAppMain, но это не так.

namespace Ui {
    class TestAppMain;
}

class TestAppMain : public QMainWindow{
    public:
        explicit TestAppMain(QWidget *parent = 0);

    private:
        Ui::TestAppMain *ui;
};

TestAppMain::TestAppMain(QWidget *parent): QMainWindow(parent), ui(new Ui::TestAppMain){
    ui->setupUi(this);
}

1 Ответ

10 голосов
/ 19 сентября 2011

Ui::TestAppMain не совпадает с вашим TestAppMain классом. Это еще один класс C ++, сгенерированный Qt из файла .ui, который вы создали в Qt Creator. Чтобы избежать путаницы и конфликтов имен, Qt помещает все такие сгенерированные классы в пространство имен Ui.

Это стандартная практика Qt - включать экземпляр Ui::MyWidget в ваш собственный класс MyWidget. В вашем случае после создания экземпляра Ui::TestAppMain этот объект используется для инициализации основного окна (представленного вашим классом TestAppMain) в соответствии с макетом, указанным в TestAppMain.ui. Это делается путем вызова ui->setupUi(this).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...