菜单 QML 类型

本地菜单。 更多信息...

导入语句import Qt.labs.platform
继承

QtObject

属性

信号

方法

详细描述

Menu 类型提供了用于本地平台弹窗菜单的 QML API。

菜单可以使用在MenuBar中,或者作为一个独立的上下文菜单。以下示例演示了如何在右键点击时打开上下文菜单

MouseArea {
    anchors.fill: parent
    acceptedButtons: Qt.RightButton
    onClicked: zoomMenu.open()
}

Menu {
    id: zoomMenu

    MenuItem {
        text: qsTr("Zoom In")
        shortcut: StandardKey.ZoomIn
        onTriggered: zoomIn()
    }

    MenuItem {
        text: qsTr("Zoom Out")
        shortcut: StandardKey.ZoomOut
        onTriggered: zoomOut()
    }
}

要创建子菜单,请将菜单声明为另一个菜单的子项

Menu {
    title: qsTr("Edit")

    Menu {
        title: qsTr("Advanced")

        MenuItem {
            text: qsTr("Auto-indent Selection")
            onTriggered: autoIndentSelection()
        }

        MenuItem {
            text: qsTr("Rewrap Paragraph")
            onTriggered: rewrapParagraph()
        }
    }
}

动态生成菜单项

您可以使用Instantiator动态生成菜单项。以下代码演示了如何实现“最近文件”子菜单,其中项来自存储在设置中的文件列表

Menu {
    title: qsTr("File")

    Menu {
        id: recentFilesMenu
        title: qsTr("Recent Files")
        enabled: recentFilesInstantiator.count > 0

        Instantiator {
            id: recentFilesInstantiator
            model: settings.recentFiles
            delegate: MenuItem {
                text: settings.displayableFilePath(modelData)
                onTriggered: loadFile(modelData)
            }

            onObjectAdded: (index, object) => recentFilesMenu.insertItem(index, object)
            onObjectRemoved: (index, object) => recentFilesMenu.removeItem(object)
        }

        MenuSeparator {}

        MenuItem {
            text: qsTr("Clear Recent Files")
            onTriggered: settings.clearRecentFiles()
        }
    }
}

可用性

以下平台目前支持原生平台菜单

  • macOS
  • iOS
  • Android
  • Linux(在带有GTK+平台主题的情况下仅作为独立的上下文菜单可用)

Qt Labs平台模块在未提供原生实现的平台上将使用Qt Widgets作为后备。因此,使用Qt Labs平台模块的类型的应用程序应链接到QtWidgets并使用QApplication而不是QGuiApplication

要将QtWidgets库链接到您的qmake项目文件,请添加以下内容

QT += widgets

main()中创建QApplication的实例

#include <QApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    return app.exec();
}

注意:Qt.labs模块中的类型在未来版本中不保证兼容性。

另请参阅MenuItemMenuSeparatorMenuBar

属性文档

data : list<QtObject> [default]

此默认属性包含作为菜单子项声明的所有对象的列表。数据属性包括不是MenuItem实例的对象,例如TimerQtObject

另请参阅items


enabled : bool

此属性表示菜单是否启用。默认值是true


font : font

此属性持有菜单的字体。

另请参阅title


图标组

icon.mask : bool [since Qt.labs.platform 1.1 (Qt 5.12)]

icon.name : string [since Qt.labs.platform 1.1 (Qt 5.12)]

icon.source : url [since Qt.labs.platform 1.1 (Qt 5.12)]

此属性持有菜单项的图标。

此QML属性自Qt.labs.platform 1.1(Qt 5.12)起被引入。


items : list<MenuItem>

此属性持有菜单中的项目列表。


此属性持有菜单所属的菜单栏,或者当菜单不在菜单栏中时为null


此属性持有表示菜单(在父菜单中)的项目。


minimumWidth : int

该属性保存菜单的最小宽度。默认值是-1(没有最小宽度)。


parentMenu : Menu [只读]

该属性保存所属的父级菜单,或null表示该菜单不是子菜单。


systemTrayIcon : SystemTrayIcon [只读]

该属性保存所属的系统托盘图标,或null表示该菜单不在系统托盘图标中。


title : string

该属性保存菜单的标题。


type : enumeration

该属性保存菜单的类型。

可用值

常量描述
Menu.DefaultMenu正常菜单(默认)。
Menu.EditMenu带有预填充的剪切、复制和粘贴项的编辑菜单。

visible : bool

该属性保存菜单是否可见。默认值是true


信号文档

aboutToHide()

当菜单即将从用户那里隐藏时,发出此信号。

注意:相应处理程序是onAboutToHide


aboutToShow()

当菜单即将向用户显示时,发出此信号。

注意:相应处理程序是onAboutToShow


方法文档

void addItem(MenuItem item)

item添加到菜单的末尾。


void addMenu(Menu submenu)

submenu添加到菜单的末尾。


void clear()

从菜单中移除所有项。


void close()

关闭菜单。


void insertItem(int index, MenuItem item)

在菜单中指定的index位置插入item


void insertMenu(int index, Menu submenu)

在菜单中指定的index位置插入submenu


void open(MenuItem item)

在当前鼠标位置打开菜单,可选地将其对齐到菜单item


void open(Item target, MenuItem item)

在指定的target项上打开菜单,可选地将其对齐到菜单item


void removeItem(MenuItem item)

从菜单中移除item


void removeMenu(Menu submenu)

从菜单中移除submenu


© 2024Qt公司有限公司。本文件内包含的文档贡献归其各自所有者所有。本文件提供的内容根据自由软件基金会发布的GNU自由文档许可协议版本1.3授权。Qt及其相应标志为芬兰及/或其他国家/地区的Qt公司有限公司的商标。所有其他商标均为其各自所有者的财产。