gpt4 book ai didi

c++ - 派生 QMainWindow 并更改其布局

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:20:55 27 4
gpt4 key购买 nike

我在自定义 QMainWindow 时遇到了很大的问题,因为我不知道如何实现以下内容:

QMainWindow 文档中,QMainWindow 有一些用于工具栏、停靠小部件、状态栏和其他的特殊区域:

enter image description here

现在我想要的是为新的自定义类型的小部件创建一个新的自定义区域,例如:

enter image description here

我尝试派生 QWidget 并将我的自定义小部件放在上面,并在其下方放置一个 QMainWindow 但使用此方法我必须从我的 重定向所有标准 QMainWindow 方法>QWidget 到它的 QMainWindow child ,这很不方便。

我的问题是:是否可以自定义QMainWindow 布局并向标准布局添加一个附加区域,如上图中的Custom Widget 区域?

最佳答案

我有两个消息要告诉你:坏消息和好消息。

坏消息:QMainWindow 使用 QMainWindowLayout,它是 Qt 私有(private) header 的一部分,因此您无法按原样“诚实地”自定义布局。

但你仍然可以做到。有一个 QMainWindow::setMenuWidget 方法可能对您有用。如果你的主窗口没有菜单栏那么你可以简单地写

setMenuWidget(myCustomWidget);

myCustomWidget将被放置在窗口的顶部。

但是,如果您的应用程序中有菜单栏,那就没那么容易了。但即使在那种情况下,您仍然可以在窗口顶部放置一个由两部分组成的小部件:上方的自定义小部件和下方的菜单栏。例如,对于 QtDesigner 生成的窗口,可以像下面这样完成:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QLabel *coolLabel = new QLabel("The coolest text in the world", this);
QWidget *menuWidget = new QWidget;
QVBoxLayout *vLayout = new QVBoxLayout;
menuWidget->setLayout(vLayout);
vLayout->addWidget(coolLabel);
vLayout->addWidget(ui->menuBar);
setMenuWidget(menuWidget);
}

关于c++ - 派生 QMainWindow 并更改其布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26434563/

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