Qt:为什么添加布局到MainWindow(通过代码)不起作用,但添加为CentralWidget工作?

Sha*_*med 4 qt qwidget qmainwindow

我已经编写了一个QWidget MyWidget,我想增加两个MyWidgetQVBoxLayoutMainWindow类(同MainWindow其提供的默认当我们打开Qt Creator中).所以,我所做的是,在构造函数中MainWindow,我拿了两个指针MyWidget,指向同一个类的实例,然后将小部件添加到a QVBoxLayout和被调用setLayout,但是当我运行代码时,ui什么都没有!

演示代码(不起作用):

#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);
}
Run Code Online (Sandbox Code Playgroud)

但是MainWindow什么都没显示.现在,根据这个答案,我必须为窗口小部件添加布局,然后将新窗口小部件设置为窗口小部件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);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么?

vah*_*cho 5

QMainWindow文档清楚地描述了原因:

QMainWindow 有自己的布局,您可以在其中添加QToolBars,QDockWidgets,QMenuBar和QStatusBar.布局的中心区域可以被任何类型的小部件占用.

注意:不支持创建没有中央窗口小部件的主窗口.即使它只是一个占位符,您也必须拥有一个中央窗口小部件.