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