gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:47:22 32 4
gpt4 key购买 nike

我已经编码了 QWidget MyWidget我想添加两个 MyWidgetQVBoxLayoutMainWindow类(与我们打开 Qt Creator 时默认提供的 MainWindow 相同)。所以,我所做的是,在 MainWindow 的构造函数中,我拿了两个指针MyWidget ,指向同一类的实例,然后将小部件添加到 QVBoxLayout并被称为 setLayout ,但是当我运行代码时,用户界面什么都不包含!

演示代码(无效):

#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);
}

我的问题是为什么?

最佳答案

原因由 QMainWindow 清楚描述文档:

QMainWindow has its own layout to which you can add QToolBars, QDockWidgets, a QMenuBar, and a QStatusBar. The layout has a center area that can be occupied by any kind of widget.





Note: Creating a main window without a central widget is not supported. You must have a central widget even if it is just a placeholder.

关于Qt:为什么向 MainWindow 添加布局(通过代码)不起作用,但添加为 CentralWidget 工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24599186/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com