我已对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);
}
我的问题是为什么?
答案 0 :(得分:5)
QMainWindow
文档清楚地描述了原因:
QMainWindow 有自己的布局,你可以添加QToolBars, QDockWidgets,QMenuBar和QStatusBar。布局有一个中心 任何类型的小部件都可以占用的区域。
和
注意:创建没有中央窗口小部件的主窗口不是 支持的。你必须有一个中央小部件,即使它只是一个 占位符。