QtQuick Controls中的菜单栏2

问题描述 投票:9回答:4

如何在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菜单栏中使用原生菜单等。

qt qml qtquick2 qtquickcontrols2
4个回答
7
投票

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)。


6
投票

我在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


4
投票

Qt Quick Controls 2的https://doc.qt.io/qt-5.10/qml-qtquick-controls2-menubar.html没有ApplicationWindow属性,它已被更可定制的接受menuBarheader property所取代(但它不再接受Item)。

Qt Quick Controls 2并不是为了提供原生桌面应用程序,而是为了提供简单,高效和可定制的组件。例如在QQC2中你会使用MenuBarToolBar作为TabBarheader

虽然它没有记录,但似乎只有ApplicationWindow作为MenuBar的孩子(在QQC1和QQC2中)在OS X上设置原生菜单栏(不是在Android上,我没有在其他平台上测试过它) 。


2
投票

在Qt 5.10中为Controls2引入了此功能。界面非常相似,除了MenuItems已被更通用的Action取代。

ApplicationWindow

我意识到这是一个古老的问题,但这可能仍然适合像我这样的路人。

© www.soinside.com 2019 - 2024. All rights reserved.