Qt C++初始化列表混乱

Sho*_*ook 4 c++ qt initialization-list

我开始使用Qt(和C++,在较小程度上),我想确保在继续之前完全理解基本代码.我知道初始化列表中的第一个元素用于选择非默认的继承构造函数.

但是ui(新的Ui :: TestAppMain)的目的是什么?在我看来它将是一个无限循环,因为ui被设置为构造函数中的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);
}
Run Code Online (Sandbox Code Playgroud)

Mac*_*tle 10

Ui::TestAppMain和你的TestAppMain班级不一样.它是Qt从你在Qt Creator中创建的.ui文件生成的另一个C++类.为了避免混淆和命名冲突,Qt将所有这些生成的类放在Ui命名空间中.

Ui::MyWidget在您自己的类中包含一个实例是标准的Qt实践MyWidget.在您的情况下,在实例化之后Ui::TestAppMain,您将使用该对象TestAppMain根据您在TestAppMain.ui中指定的布局初始化主窗口(由您的类表示).这是通过调用来完成的ui->setupUi(this).