Sha*_*med 4 qt qwidget qmainwindow
我已经编写了一个QWidget MyWidget,我想增加两个MyWidget同QVBoxLayout在MainWindow类(同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)
我的问题是为什么?
QMainWindow文档清楚地描述了原因:
QMainWindow 有自己的布局,您可以在其中添加QToolBars,QDockWidgets,QMenuBar和QStatusBar.布局的中心区域可以被任何类型的小部件占用.
和
注意:不支持创建没有中央窗口小部件的主窗口.即使它只是一个占位符,您也必须拥有一个中央窗口小部件.
| 归档时间: |
|
| 查看次数: |
2570 次 |
| 最近记录: |