2014-07-06 52 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。該佈局有一箇中心 區域,可以被任何類型的小部件佔用。

注:沒有一箇中央物件創建一個主窗口不 支持。即使它只是一個 佔位符,您也必須擁有一箇中央控件。

相關問題