Qt C ++初始化列表混乱

时间:2011-09-18 22:52:41

标签: 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);
}

1 个答案:

答案 0 :(得分:10)

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

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