2011-09-18 5 views
4

Qt (및 C++, 더 적은 범위에서 시작)를 시작하고 계속하기 전에 기본 코드를 완전히 이해하고 싶었습니다. 초기화 목록의 첫 번째 요소가 기본이 아닌 상속 된 생성자를 선택하는 데 사용되는 것으로 알고 있습니다.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); 
} 

답변

10

Ui::TestAppMainTestAppMain 클래스와 동일하지 않습니다. Qt Creator에서 생성 한 .ui 파일에서 Qt에 의해 생성되는 또 다른 C++ 클래스입니다. 혼동과 이름 충돌을 피하기 위해 Qt는 생성 된 모든 클래스를 Ui 네임 스페이스에 넣습니다.

Ui::MyWidget의 인스턴스를 포함시키는 것이 표준 Qt 연습입니다. 귀하의 경우에 Ui::TestAppMain을 인스턴스화 한 후에는 해당 객체를 사용하여 TestAppMain.ui에 지정한 레이아웃에 따라 기본 창 (TestAppMain 클래스로 표시)을 초기화합니다. 이는 ui->setupUi(this)을 호출하여 수행됩니다.