我的应用程序对多个“页面”使用 QTabWidget,其中顶级菜单根据用户所在的页面而变化。
我的问题是,尝试重新创建菜单栏的内容会导致严重的显示问题。它在除 Mac OS X 之外的所有平台上按预期使用第一种和第三种样式(尚未测试第二种,但我不想使用该样式)。
第一个菜单是按照我在应用程序中创建的大多数方式创建的,并且它们收到正确的标题,但在重新创建菜单后立即消失。
第二个菜单出现在菜单栏的初始填充和重新填充上,但在这两种情况下都具有标签“无标题”。第二个菜单的样式只是在尝试解决此问题时创建的,因此这是我能够保留菜单的唯一方法。
第三个动态菜单永远不会出现,就这样。我使用这种样式来动态填充即将显示的菜单。
我尝试删除 QMenuBar 并重新创建一个
m_menuBar = new QMenuBar(0);
Run Code Online (Sandbox Code Playgroud)
并使用它来代替m_menuBar->clear()但它具有相同的行为。
我没有足够的声誉来内嵌发布图像,所以我将包含 imgur 链接:
启动行为: https: //i.stack.imgur.com/V4N6O.png
发布按钮点击行为: https://i.stack.imgur.com/fytDc.png
我创建了一个最小的示例来在带有 Qt 5.3 的 Mac OS X 10.9.4 上重现此行为。
主窗口.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
m_menuBar = new QMenuBar(0);
m_dynamicMenu = new QMenu("Dynamic");
connect(m_dynamicMenu, SIGNAL(aboutToShow()), this, SLOT(updateDynamicMenu()));
changeMenuBar();
QPushButton *menuBtn = new QPushButton("Test");
connect(menuBtn, SIGNAL(clicked()), this, SLOT(changeMenuBar()));
setCentralWidget(menuBtn);
}
void MainWindow::changeMenuBar() {
m_menuBar->clear();
// Disappears as soon as …Run Code Online (Sandbox Code Playgroud)