菜单 QML 类型
菜单弹出窗口,可以用作上下文菜单或弹出菜单。 更多...
导入语句 | import QtQuick.Controls |
继承 |
属性
- 级联 : bool
(自 QtQuick.Controls 2.3 (Qt 5.10))
- 内容数据 : list<QtObject>
- 内容模型 : model
- 计数 : int
(自 QtQuick.Controls 2.3 (Qt 5.10))
- 当前索引 : int
(自 QtQuick.Controls 2.3 (Qt 5.10))
- 代理 : Component
(自 QtQuick.Controls 2.3 (Qt 5.10))
- 焦点 : bool
- 图标
- 重叠 : real
(自 QtQuick.Controls 2.3 (Qt 5.10))
- 标题 : string
方法
- 动作 actionAt(int index)
(自 QtQuick.Controls 2.3 (Qt 5.10))
- void addAction(Action action)
(自 QtQuick.Controls 2.3 (Qt 5.10))
- void addItem(Item item)
- void addMenu(Menu menu)
(自 QtQuick.Controls 2.3 (Qt 5.10))
- void dismiss()
(自 QtQuick.Controls 2.3 (Qt 5.10))
- void insertAction(int index, Action action)
(自 QtQuick.Controls 2.3 (Qt 5.10))
- void insertItem(int index, Item item)
- void insertMenu(int index, Menu menu)
(自QtQuick.Controls 2.3 (Qt 5.10)以来)
- Item itemAt(int index)
- Menu menuAt(int index)
(自QtQuick.Controls 2.3 (Qt 5.10)以来)
- void moveItem(int from, int to)
- void popup(MenuItem item)
(自QtQuick.Controls 2.3 (Qt 5.10)以来)
- void popup(Item parent, MenuItem item)
(自QtQuick.Controls 2.3 (Qt 5.10)以来)
- void popup(point pos, MenuItem item)
(自QtQuick.Controls 2.3 (Qt 5.10)以来)
- void popup(Item parent, point pos, MenuItem item)
(自QtQuick.Controls 2.3 (Qt 5.10)以来)
- void popup(real x, real y, MenuItem item)
(自QtQuick.Controls 2.3 (Qt 5.10)以来)
- void popup(Item parent, real x, real y, MenuItem item)
(自QtQuick.Controls 2.3 (Qt 5.10)以来)
- void removeAction(Action action)
(自QtQuick.Controls 2.3 (Qt 5.10)以来)
- void removeItem(Item item)
(自QtQuick.Controls 2.3 (Qt 5.10)以来)
- void removeMenu(Menu menu)
(自QtQuick.Controls 2.3 (Qt 5.10)以来)
- Action takeAction(int index)
(自QtQuick.Controls 2.3 (Qt 5.10)以来)
- MenuItem takeItem(int index)
(自QtQuick.Controls 2.3 (Qt 5.10)以来)
- Menu takeMenu(int index)
(自QtQuick.Controls 2.3 (Qt 5.10)以来)
详细信息
菜单有两个主要用途
- 上下文菜单;例如,在右键单击后显示的菜单
- 弹出菜单;例如,在单击按钮后显示的菜单
当用作上下文菜单时,通过调用 popup() 打开菜单是推荐的方式。除非显式指定位置,否则在具有鼠标光标的桌面平台上,菜单定位于鼠标光标处,否则在父项上方居中。
MouseArea { anchors.fill: parent acceptedButtons: Qt.LeftButton | Qt.RightButton onClicked: { if (mouse.button === Qt.RightButton) contextMenu.popup() } onPressAndHold: { if (mouse.source === Qt.MouseEventNotSynthesized) contextMenu.popup() } Menu { id: contextMenu MenuItem { text: "Cut" } MenuItem { text: "Copy" } MenuItem { text: "Paste" } } }
当用作弹出菜单时,最简单的指定位置方法是使用相应的属性指定所需的 x 和 y 坐标,然后调用 open() 打开菜单。
Button { id: fileButton text: "File" onClicked: menu.open() Menu { id: menu y: fileButton.height MenuItem { text: "New..." } MenuItem { text: "Open..." } MenuItem { text: "Save" } } }
如果按钮还应在单击时关闭菜单,请使用 Popup.CloseOnPressOutsideParent
标志
onClicked: menu.visible = !menu.visible Menu { // ... closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent
自QtQuick.Controls 2.3(Qt 5.10)以来,还可以在菜单内部创建子菜单并声明Action对象
Menu { Action { text: "Cut" } Action { text: "Copy" } Action { text: "Paste" } MenuSeparator { } Menu { title: "Find/Replace" Action { text: "Find Next" } Action { text: "Find Previous" } Action { text: "Replace" } } }
子菜单默认为桌面平台上带有鼠标光标的平台上的级联。非级联菜单一次显示一个菜单,并相对于父菜单居中。
通常,菜单项作为菜单的子项静态声明,但菜单还提供了addItem、insertItem、moveItem以及removeItem动态添加菜单项的API。可以使用itemAt()或contentChildren访问菜单中的项。
尽管MenuItems通常与菜单一起使用,但菜单可以包含任何类型的项。
边距
由于它继承了Popup,菜单支持margins属性。默认情况下,所有内置样式都指定菜单的边距为0
,以确保菜单保持在窗口范围内。要允许菜单超出窗口范围(例如,为了动画显示菜单项),请将边距属性设置为-1
。
动态生成菜单项
您可以使用Instantiator或动态对象创建动态创建菜单项。
使用Instantiator
您可以使用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() } } }
使用动态对象创建
您还可以使用Qt.createComponent()动态从QML文件加载组件。组件准备完成后,您可以调用其createObject()方法来创建该组件的实例。
Row { anchors.centerIn: parent Component { id: menuItemComponent MenuItem {} } Button { id: button text: "Menu" onClicked: menu.open() Menu { id: menu } } Button { text: "Add item" onClicked: { onClicked: { let menuItem = menuItemComponent.createObject( menu.contentItem, { text: qsTr("New item") }) menu.addMenu(menuItem) } } } }
另请参阅 自定义菜单、MenuItem、菜单控件、弹出控件以及从JavaScript动态创建QML对象。
属性说明
cascade : bool |
此属性表示菜单是否级联其子菜单。
默认值因平台而异。在具有鼠标光标的桌面平台上,菜单默认为级联。非级联菜单一次显示一个菜单,并居中在父菜单上方。
注意:切换菜单打开时的属性值没有效果。
此属性在QtQuick.Controls 2.3(Qt 5.10)中引入。
另请参阅 overlap。
此属性存储内容数据列表。
该列表包含已声明为菜单子项的所有对象,以及使用addItem()和insertItem()方法分别动态添加或插入的项目。
注意:与contentChildren
不同,contentData
还包括非可视的QML对象。当插入或移动项时,它不会被重新排序。
另请参阅 Item::data和contentChildren。
contentModel : model |
此属性保存用于显示菜单项的模型。
内容模型用于可视化目的。它可以分配给表示菜单内容的项模型。
Menu { id: menu contentItem: ListView { model: menu.contentModel } }
该模型允许将菜单项静态声明为菜单的子项。
count : int |
此属性包含项的数量。
此属性在QtQuick.Controls 2.3(Qt 5.10)中引入。
currentIndex : int |
此属性包含当前突出显示项的索引。
可以通过鼠标悬停或键盘导航来突出显示菜单项。
此属性在QtQuick.Controls 2.3(Qt 5.10)中引入。
delegate : Component |
focus : bool |
此属性包含弹出窗口是否希望获取焦点。
当弹出窗口实际收到焦点时,activeFocus 将被设置为 true
。有关更多信息,请参阅 Qt Quick 中的键盘焦点。
默认值为 true
。
另见 activeFocus.
此属性组是在 QtQuick.Controls 6.5 中添加的。
名称 | 描述 |
---|---|
name | 此属性包含要使用的图标的名称。 图标将从平台主题中加载。如果主题中找到图标,它将始终使用;即使 icon.source 也已设置也是如此。如果没有找到图标,则将使用 icon.source。 有关主题图标的更多信息,请参阅 QIcon::fromTheme()。 |
source | 此属性包含要使用的图标的名称。 图标将以常规图像的形式加载。 如果 icon.name 已设置并引用了有效的主题图标,它将始终使用此属性。 |
width | 此属性包含图标的宽度。 图标的宽度永远不会超过此值,但如果需要,它将缩小。 |
height | 此属性包含图标的长度。 图标的长度永远不会超过此值,但如果需要,它将缩小。 |
color | 此属性包含图标的颜色。 除非颜色设置为 |
cache | 此属性指定是否应缓存图标。 默认值为 true。 有关更多信息,请参阅 cache。 此属性是在 QtQuick.Controls 2.13 中引入的。 |
另请参阅 AbstractButton::text、AbstractButton::display 以及 Qt Quick Controls 中的图标。
overlap : real |
此属性持有菜单水平重叠其父菜单像素的数量。
当将菜单用作级联子菜单时,此属性才有效。
默认值是样式特定的。
注意:切换菜单打开时的属性值没有效果。
此属性在QtQuick.Controls 2.3(Qt 5.10)中引入。
另请参阅 cascade。
title : string |
此属性包含菜单的标题。
当菜单是子菜单时,菜单的标题通常显示在菜单项的文本中;当它在菜单栏中时,显示在工具按钮的文本中。
方法文档
在具有鼠标光标的桌面平台上,在鼠标光标处打开菜单,否则在其实例元素上方居中打开菜单。
菜单可以选择性地与特定菜单项对齐。
此QML方法是在QtQuick.Controls 2.3(Qt 5.10)中引入的。
另请参阅 Popup::open()。
在弹出窗口坐标系统中,在指定位置 pos 打开菜单,即相对于其 parent 元素的坐标。
菜单可以选择性地与特定菜单项对齐。
此QML方法是在QtQuick.Controls 2.3(Qt 5.10)中引入的。
另请参阅 Popup::open()。
在弹出窗口坐标系统中,在指定位置 x、y 打开菜单,即相对于其 parent 元素的坐标。
菜单可以选择性地与特定菜单项对齐。
此QML方法是在QtQuick.Controls 2.3(Qt 5.10)中引入的。
另请参阅 dismiss() 和 Popup::open。
返回指定索引 index 的操作,如果没有有效索引或指定索引没有操作,则返回 null
。
此方法是在QtQuick.Controls 2.3(Qt 5.10)中引入的。
|
将action添加到菜单的末尾。
此方法是在QtQuick.Controls 2.3(Qt 5.10)中引入的。
void addItem(Item item) |
将item添加到项目列表的末尾。
|
将menu作为子菜单添加到菜单的末尾。
此方法是在QtQuick.Controls 2.3(Qt 5.10)中引入的。
|
关闭此菜单所属的所有菜单。
注意:与close()() 只关闭菜单及其子菜单不同,dismiss()
关闭整个菜单层次结构,包括父菜单。在实际应用中,close()
适用于实现菜单层次结构的导航,而 dismiss()
是关闭整个菜单层次结构的适当方法。
此方法是在QtQuick.Controls 2.3(Qt 5.10)中引入的。
另请参阅:popup() 和 Popup::close()。
在index处插入action。索引位于菜单中的所有项内。
此方法是在QtQuick.Controls 2.3(Qt 5.10)中引入的。
在index处插入menu作为子菜单。索引位于菜单中的所有项内。
此方法是在QtQuick.Controls 2.3(Qt 5.10)中引入的。
返回索引为index的子菜单,如果索引无效或指定的索引处没有子菜单,则返回 null
。
此方法是在QtQuick.Controls 2.3(Qt 5.10)中引入的。
|
删除并销毁指定的 action。
此方法是在QtQuick.Controls 2.3(Qt 5.10)中引入的。
|
删除并销毁指定的 item。
此方法是在QtQuick.Controls 2.3(Qt 5.10)中引入的。
|
删除并销毁指定的菜单。
此方法是在QtQuick.Controls 2.3(Qt 5.10)中引入的。
删除并返回索引位置为index的操作。该索引在菜单中的所有项内有效。
注意:操作的所有权将转移到调用者。
此方法是在QtQuick.Controls 2.3(Qt 5.10)中引入的。
删除并返回索引位置为index的项。
注意:项的所有权将转移到调用者。
此方法是在QtQuick.Controls 2.3(Qt 5.10)中引入的。
删除并返回索引位置为index的菜单。该索引在菜单中的所有项内有效。
注意:菜单的所有权将转移到调用者。
此方法是在QtQuick.Controls 2.3(Qt 5.10)中引入的。
© 2024 Qt 公司有限。此处包含的文档贡献归其各自所有者所有。提供的文档是根据由自由软件基金会发布的 GNU 自由文档许可证版本 1.3 条款许可的。Qt 及相应的标志是芬兰的 Qt 公司和其他世界上国家的注册商标。所有其他商标属于其各自所有者。