如何在 QtQuick Controls 2 中拥有菜单栏?它曾经是这样的(在ApplicationWindow中):
menuBar: MenuBar {
Menu {
title: qsTr('File')
MenuItem {
text: qsTr('&Test')
onTriggered: console.log('test')
}
MenuItem {
text: qsTr('&Exit')
onTriggered: Qt.quit();
}
}
}
但是在升级到 Qt 5.7 之后,它给出了这个错误:
Invalid property name "menuBar".(M16)
附言它曾经使用设备的 native 菜单系统,例如在 OS X 上它使用 native 屏幕的顶部栏菜单栏,在 Linux 和 Windows 上它在应用程序顶部栏菜单栏中使用 native 等。
最佳答案
我自己在处理这个问题时遇到了这个问题。 Qt.labs.platform
,如前所述,不适用于 Windows,并且 Qt.Quick.Controls 2
不会尝试在任何东西上本地实现菜单。如果您想要实际的系统原生菜单而不是自定义 QML 对象,这是不令人满意的。
我找到的解决方案是导入 QtQuick.Controls 1
并将其仅用于主窗口和菜单栏。 QML 的导入语法使这很容易。例如:
import QtQuick.Controls 2.12
import QtQuick.Controls 1.2 as OldControls
OldControls.ApplicationWindow {
visible: true
menuBar: OldControls.MenuBar { // Should attach natively
OldControls.Menu {
title: 'File'
OldControls.MenuItem {
text: 'New'
shortcut: StandardKey.New
onTriggered: context.new()
}
}
}
Button { ... } // QtQuick.Controls 2 version
}
现在我可以使用所有现代 Qt.Quick.Controls 2
的精美功能和改进,同时轻松获得 native 菜单(Windows 位于窗口顶部,Mac 位于屏幕顶部)。请注意,要使其正常工作,仅声明
MenuBar
是不够的。 ;它必须设置为menuBar
ApplicationWindow
的属性(property).
关于qt - QtQuick Controls 2 中的菜单栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37872504/