2011-09-18 120 views
4

我正在開始使用Qt(和C++,在一定程度上),並且我想確保在繼續之前完全理解基本代碼。據我所知,初始化列表中的第一個元素被用來選擇一個非默認的繼承構造函數。Qt C++初始化列表混淆

ui(new 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); 
} 

回答

10

Ui::TestAppMain是不一樣的你TestAppMain類。這是另一個由Qt從你在Qt Creator中創建的.ui文件生成的C++類。爲了避免混淆和命名衝突,Qt將所有這些生成的類放入Ui命名空間中。

在您自己的課程MyWidget中包含Ui::MyWidget的實例是一種標準的Qt練習。在你的情況下,在你實例化Ui::TestAppMain之後,根據你在TestAppMain.ui中指定的佈局,使用該對象來初始化你的主窗口(由你的TestAppMain類表示)。這是通過調用ui->setupUi(this)完成的。