2014-07-06 5 views
4

QWidget MyWidget을 코딩했고 MainWindow 클래스에 QVBoxLayout과 함께 MyWidget 두 개를 추가하고 싶습니다. Qt Creator를 열었을 때 기본값 인 MainWindow이 제공됩니다. 그래서, 내가 한 것은 MainWindow의 생성자에서 MyWidget의 두 포인터를 가져 와서 같은 클래스의 인스턴스를 가리킨 다음 QVBoxLayout에 위젯을 추가하고 setLayout을 호출했지만 코드를 실행했을 때 ui는 아무것도 포함하지 않았다!Qt : MainWindow에 레이아웃을 추가하는 것이 (코드별로) 작동하지 않았지만 CentralWidget이 작동하는 이유는 무엇입니까?

데모 코드 (작동하지 않았다) :

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <QLayout> 
#include "mywidget.h" 

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

    QVBoxLayout *layout; 
    layout=new QVBoxLayout(); 
    MyWidget *a=new MyWidget(),*b=new MyWidget(); 
    layout.addWidget(a); 
    layout.addwidget(b); 
    setLayout(layout); 
} 

그러나 MainWindow를 아무것도 없었다. 이제 this answer에 따르면 위젯에 레이아웃을 추가 한 다음 MainWindow의 중앙 위젯으로 새 위젯을 설정해야합니다. 나는 그것을했고 그것은 효과가 있었다.

새로운 데모 코드 (근무가) :

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <QLayout> 
#include "mywidget.h" 

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

    QVBoxLayout *layout; 
    layout=new QVBoxLayout(); 
    MyWidget *a=new MyWidget(),*b=new MyWidget(); 
    layout.addWidget(a); 
    layout.addwidget(b); 
    QWidget *window=new QWidget(); 
    window.setLayout(layout); 
    setCentralWidget(window); 
} 

내 질문은 왜?

답변

5

이유는 명확 QMainWindow 문서에 의해 설명 :

당신이 가지 QToolBar, QDockWidgets하는 QMenuBar 및 QStatusBar을 추가 할 수있는 자신의 레이아웃있다 QMainWindow

. 레이아웃에는 모든 유형의 위젯이 차지할 수있는 영역이 있습니다.

참고 : 중앙 위젯없이 주 창을 생성하지 지원됩니다. 자리 표시 자라해도 중앙 위젯이 있어야합니다.