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);
}
내 질문은 왜?