Menu QML Type
本地菜单更多
Import Statement: | import Qt.labs.platform |
Inherits: |
属性
- data : list<QtObject>
- enabled : bool
- font : font
- icon
(since Qt.labs.platform 1.1 (Qt 5.12))
- 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))
- icon.mask : bool
- items : list<MenuItem>
- menuBar : MenuBar
- menuItem : MenuItem
- minimumWidth : int
- parentMenu : Menu
- systemTrayIcon : SystemTrayIcon
- title : string
- type : enumeration
- visible : bool
信号
方法
- void addItem(MenuItem item)
- void addMenu(Menu submenu)
- void clear()
- void close()
- void insertItem(int index, MenuItem item)
- void insertMenu(int index, Menu submenu)
- void open(MenuItem item)
- void open(Item target, MenuItem item)
- void removeItem(MenuItem item)
- void removeMenu(Menu submenu)
详细说明
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 。
属性文档
enabled : bool |
该属性显示菜单是否已启用。默认值为true
。
该属性保存菜单项的图标。
此 QML 属性在 Qt.labs.platform 1.1 (Qt 5.12) 中引入。
menuBar : MenuBar |
This property holds the menubar that the menu belongs to, ornull
if the menu is not in a menubar.该属性保存菜单所属的菜单栏,如果菜单不在菜单栏中,则为 。
menuItem : MenuItem |
该属性用于显示菜单的项目(在父菜单中)。
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 open(MenuItem item) |
在当前鼠标位置打开菜单,可选择与菜单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.