gpt4 book ai didi

c++ - QMenuBar在Linux中不以窗体显示

转载 作者:太空宇宙 更新时间:2023-11-04 11:22:18 29 4
gpt4 key购买 nike

我不明白是什么导致了 QMenuBar 的这种奇怪行为:

当我在头文件 (dialog.h) 中声明时,不显示菜单栏:

#include <QMenuBar>
#include <QMenu>
...
private:
QMenuBar* bar;
QMenu* file;
...

在构造函数的源文件中:

...
QVBoxLayout* mainLayout = new QVBoxLayout;
bar = new QMenuBar(this);
file = new QMenu("File");
bar->addMenu(file);
mainLayout->addWidget(bar);
this->setLayout(mainLayout);
...

如果我直接在构造函数中创建一个菜单栏(而不是在头文件中声明它),一切正常并且菜单栏出现在表单上:

...
QMenuBar * b = new QMenuBar(this);
QMenu * m = new QMenu("File1");
b->addMenu(m);
mainLayout->addWidget(b);
this->setLayout(mainLayout);
...

在 Windows 上 我没有遇到这样的问题。此行为仅在 Linux 上

我做错了什么?我有什么误解吗?

我有 Qt 4.8.3 和 gcc 版本 4.4.7。

这是一个具有正确菜单栏行为的表单:

Form with correct behavior of Menu-bar

最佳答案

运行我获得的代码:

QWidget::setLayout: Attempting to set QLayout "" on MainWindow "", which already has a layout

事实上,删除2行

mainLayout->addWidget(bar);
this->setLayout(mainLayout);

我有菜单(实际上在应用程序和 Unity 顶部栏中)。

但是,如果它是您窗口中的主菜单,则不要创建 QMenuBar,而是使用

menuBar()->addMenu(file);

QMainWindow::menuBar () 返回主窗口的菜单栏。此外,如果菜单栏不存在,此函数会创建并返回一个空菜单栏。

关于c++ - QMenuBar在Linux中不以窗体显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17441647/

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