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

时间:2014-07-06 18:51:34

标签: qt qwidget qmainwindow

我已对QWidget MyWidget进行了编码,我想在MyWidget类中添加两个QVBoxLayout MainWindow(默认情况下提供相同的MainWindow我们打开Qt Creator)。所以,我所做的是,在MainWindow的构造函数中,我使用了MyWidget的两个指针,指向同一个类的实例,然后将小部件添加到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);
}

但是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);
}

我的问题是为什么?

1 个答案:

答案 0 :(得分:5)

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

  

QMainWindow 有自己的布局,你可以添加QToolBars,   QDockWidgets,QMenuBar和QStatusBar。布局有一个中心   任何类型的小部件都可以占用的区域。

  

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