我正在编写一个使用KDE和QML的应用程序。主窗口将是纯QML,具有非常自定义的外观,所以我根本不需要菜单栏。我打算使用Dolphin“Control”按钮,但是用QML实现。但是,如果用户有一个全局菜单栏,如Unity或KDE全局菜单栏,我想显示一个菜单栏,因此它适合其他应用程序。
我注意到这是KDE文件管理器Dolphin的工作方式。默认情况下,有一个“控制”按钮,其中包含一组有限的菜单。但是,如果有全局菜单栏,则会导出常规菜单栏,即使它仍设置为不显示菜单栏。
如何将菜单栏设置为仅在全局菜单栏中显示时才显示?它可以用纯Qt完成还是我必须使用KDE?如果通过不显示菜单栏自动提供,我该如何隐藏菜单栏?
答案 0 :(得分:1)
在查看Dolphin的源代码后,这似乎是由KDE(或者可能是Qt)自动处理的。如果菜单栏被隐藏,它将不会显示在窗口框中,但如果它被导出到全局菜单栏,无论菜单栏是否被隐藏,它都会显示。
要使菜单栏不再显示在窗口中,但仍显示在全局菜单栏中,只需执行以下操作:
menuBar()->setHidden(false);
如果您正在使用KDE并希望以标准方式隐藏/显示菜单栏,则可以使用KStandardAction
:
KStandardAction::showMenubar(this, SLOT(toggleShowMenuBar()),
actionCollection());
如果你修改工具栏,比如显示一个控制按钮,你可能需要特别做(代码取自Dolphin):
KToggleAction* showMenuBar = KStandardAction::showMenubar(0, 0,
actionCollection());
connect(showMenuBar, SIGNAL(triggered(bool)), // Fixes #286822
this, SLOT(toggleShowMenuBar()), Qt::QueuedConnection);
显然,需要特殊连接,因为插槽会修改工具栏(参见KDE bug #286822)。
答案 1 :(得分:0)
很容易知道您的应用程序是否被最小化,最大化,刚刚显示或Qt内部全屏(请参阅QWidget::windowState()
)。正式检测操作系统或其他附近窗口的状态是特定于操作系统的。
一种“hacky”方法是检查桌面的大小(请参阅QDesktopWidget
)并检查最大化窗口的大小,看看它们是否在一个单独的x量上有所不同方向。如果是,则使用全局菜单栏/任务栏模式,否则进入隐藏菜单栏模式。但是你可能需要定期检查它,以防它们自动生成任务栏。
希望有所帮助。