如何在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)
附:它曾经使用过设备的原生菜单系统,例如在OS X上它使用原生屏幕的topbar菜单栏,在Linux和Windows上它在应用程序topbar菜单栏中使用原生菜单等。
MenuBar
现已上市,并在Qt 5.10中添加。使用QtQuick.Controls 2.3或更高版本:
import QtQuick.Controls 2.3
老答案:
正如GrecKo所说,桌面不是模块的焦点,因此,你不会找到MenuBar
控件作为主要导入的一部分。直到最近,我一直在使用包含一堆RowLayout
控件的ToolButton
,每个控件打开一个Menu
,以模拟桌面应用程序的菜单栏。
然而,Qt.labs.platform
模块是recently added,它增加了对像MenuBar
这样的原生控件的支持。此模块中的类型完全是原生的,但代价是可定制性较差。如果克隆qtquickcontrols2.git
的dev分支,则可以开始使用这些。
顺便说一句,如果你不确定Qt Quick Controls 2中的等效类型是什么,那么就有一个“类型比较表”here(尽管它是unfortunately currently missing MenuBar
)。
我在Qt博客上问了同样的问题,宣布发布Qt 5.7,这是他们的答案:http://blog.qt.io/blog/2016/06/16/qt-5-7-released/#comment-1197915
所以我们应该等待Qt 5.8或克隆回购,因为米奇在他的回答中建议。
这现在在Qt Quick Controls 2中实现:qazxsw poi
Qt Quick Controls 2的https://doc.qt.io/qt-5.10/qml-qtquick-controls2-menubar.html没有ApplicationWindow
属性,它已被更可定制的接受menuBar
的header
property所取代(但它不再接受Item
)。
Qt Quick Controls 2并不是为了提供原生桌面应用程序,而是为了提供简单,高效和可定制的组件。例如在QQC2中你会使用MenuBar
或ToolBar
作为TabBar
的header
。
虽然它没有记录,但似乎只有ApplicationWindow
作为MenuBar
的孩子(在QQC1和QQC2中)在OS X上设置原生菜单栏(不是在Android上,我没有在其他平台上测试过它) 。
在Qt 5.10中为Controls2引入了此功能。界面非常相似,除了MenuItems已被更通用的Action取代。
ApplicationWindow
我意识到这是一个古老的问题,但这可能仍然适合像我这样的路人。