Menu QML Type

本地菜单更多

Import Statement: import Qt.labs.platform
Inherits:

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
  • 安卓
  • Linux(仅在使用 GTK+ 平台主题运行时可作为独立上下文菜单使用)

在没有本地实现的平台上,Qt Labs Platform 模块使用Qt Widgets 作为备用。因此,使用Qt Labs Platform 模块中类型的应用程序应链接到 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 模块中的类型不保证在未来版本中保持兼容。

另请参阅 MenuItem,MenuSeparator, 和MenuBar

属性文档

data : list<QtObject> [default]

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

另请参阅 items


enabled : bool

该属性显示菜单是否已启用。默认值为true


font : font

该属性显示菜单的字体。

另请参阅 title


icon group

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>

该属性显示菜单项的列表。


This property holds the menubar that the menu belongs to, ornull if the menu is not in a menubar.该属性保存菜单所属的菜单栏,如果菜单不在菜单栏中,则为 。


该属性用于显示菜单的项目(在父菜单中)。


minimumWidth : int

该属性表示菜单的最小宽度。默认值为-1 (无最小宽度)。


parentMenu : Menu [read-only]

该属性显示菜单所属的父菜单,如果菜单不是子菜单,则显示null


systemTrayIcon : SystemTrayIcon [read-only]

该属性显示菜单所属的系统托盘图标,如果菜单不在系统托盘图标中,则显示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


© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.