0

我不明白是什么导致了 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 vesion 4.4.7 。

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

具有正确菜单栏行为的表单

4

1 回答 1

1

运行我获得的代码:

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 ()返回主窗口的菜单栏。此外,如果菜单栏不存在,此函数会创建并返回一个空菜单栏。

于 2013-07-03T07:21:43.620 回答