我編碼了一個QWidget MyWidget
,我想在MainWindow
類(與我們打開Qt Creator時提供的默認設置相同的MainWindow
)中加上和QVBoxLayout
。所以,我做的是,在MainWindow
的構造函數中,我帶了兩個指針MyWidget
,指向同一個類的實例,然後將這些小部件添加到QVBoxLayout
並調用setLayout
,但是當我運行代碼時,你沒有包含任何東西!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);
}
但主窗口顯示什麼。現在,根據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);
}
我的問題是爲什麼呢?