4

在我正在做的一个项目中,我已经到了需要一个菜单​​栏(文件、编辑、视图等)与之交互的地步。我在 Mac 上工作,所以我希望能够使用 OS X 中已经提供的菜单栏,但是从我看到的所有文档和已经回答的问题来看,看起来只有 QMainWindow 才正确支持,a Qt Widgets 的一部分,而不是 Qt Quick。Qt Quick 中的 Mac 是否支持本机菜单栏,还是我必须编写一些特定于平台的代码来实现?提前感谢您的帮助!

4

2 回答 2

0

就像Rolf Winter 所说,你可以拥有一个带有 Qt Quick / QML 的原生 Mac OS 菜单栏,而无需使用小部件。它来自MenuBar QML Type

当然,它是 Qt Labs 组件,因此在生产中使用它存在一定的风险(无保证/稳定性)。

这是一个简化的示例:

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import Qt.labs.platform 1.1

ApplicationWindow {
    width: 500
    minimumWidth: 500
    height: 300
    minimumHeight: 300
    visible: true
    title: qsTr("Testing Mac OS native Menu Bar in Qt Quick")

    MenuBar {
        id: menuBar

        Menu {
            id: fileMenu
            title: qsTr("File")

            MenuItem {
                text: qsTr("Ololo")
                onTriggered: console.debug("ololo menu item clicked")
            }

            // this one won't show up in File menu because of its `role`,
            // and it will actually appear in the main menu - under the application name,
            // where you'd usually expect About menu to be
            MenuItem {
                //text: qsTr("About")    // no need to set the text,
                role: MenuItem.AboutRole // because it gets generated
                onTriggered: console.debug("show your About window")
            }
        }

        Menu {
            id: editMenu
            title: qsTr("Edit")

            MenuItem {
                text: qsTr("Stuff")
                onTriggered: console.debug("stuff menu item clicked")
            }
        }
    }
}

您的问题是关于 Mac OS 的,所以我没有做任何事情来使菜单跨平台(例如,在 Windows 上,您可能想将 About 菜单项移动到 Help 菜单并实际给它一些文本)。

无论如何,在 Mac OS 上,结果将如下所示:

使用 Qt Quick 创建的 Mac OS 菜单栏

如您所见,Edit菜单还填充了几个“奖励”项目(不确定这是由 Qt 还是 Mac OS 处理的)。

以防万一,我的环境:

  • Mac 操作系统 11.5.2
  • Qt 5.15.2
于 2021-08-22T12:23:33.467 回答
0

您甚至可以尝试通过添加 QMenuBar 从 cpp 获取它,然后附加您想要的菜单,例如文件、编辑等。看看这个https://doc.qt.io/qt-5/qmenubar.html 我做了这是因为我没有使用 QML 的ApplicationWindow,而是从QQuickWindow派生的自定义窗口。

于 2021-09-23T14:26:34.407 回答