2014-07-06 27 views
4

我编码了一个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); 
} 

我的问题是为什么呢?

回答

5

的原因显然是由QMainWindow文档描述:

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

注:没有一个中央物件创建一个主窗口不 支持。即使它只是一个 占位符,您也必须拥有一个中央控件。

相关问题