我编码了一个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);
}
我的问题是为什么呢?