首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QMenuBar在Linux中不以形式显示。

QMenuBar在Linux中不以形式显示。
EN

Stack Overflow用户
提问于 2013-07-03 07:01:07
回答 1查看 820关注 0票数 0

我无法理解是什么导致了QMenuBar这种奇怪的行为:

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

代码语言:javascript
复制
#include <QMenuBar>
#include <QMenu>
...
private:
    QMenuBar* bar;
    QMenu* file;
...

在构造函数中的源文件中:

代码语言:javascript
复制
...
    QVBoxLayout* mainLayout = new QVBoxLayout;
    bar = new QMenuBar(this);
    file = new QMenu("File");
    bar->addMenu(file);
    mainLayout->addWidget(bar);
    this->setLayout(mainLayout);
...

如果我直接在构造函数中创建菜单栏(而不是在头文件中声明它),那么所有操作都正常,菜单栏出现在表单上:

代码语言:javascript
复制
...
    QMenuBar * b = new QMenuBar(this);
    QMenu * m = new QMenu("File1");
    b->addMenu(m);
    mainLayout->addWidget(b);
    this->setLayout(mainLayout);
...

on 我还没有遇到这样的问题。这种行为仅限于Linux上的。

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

我的Qt是4.8.3,gcc是4.4.7。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-03 07:21:43

运行我获得的代码:

代码语言:javascript
复制
QWidget::setLayout: Attempting to set QLayout "" on MainWindow "", which already has a layout

在事实中,删除2行

代码语言:javascript
复制
mainLayout->addWidget(bar);
    this->setLayout(mainLayout);

我已经得到了菜单(在应用程序中的事实部分和统一顶部栏中也有)。

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

代码语言:javascript
复制
menuBar()->addMenu(file);

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17441647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档