QML - 使用模型项填充菜单
QML - Filling menu with model items
我正在尝试从 ListModel
动态填充 Menu
,但这种方法不起作用(当我右键单击菜单时不会显示任何内容):
这是我的菜单项:
import QtQuick.Controls 1.3
ListModel{
id:menuItems
ListElement{
text:"hello1"
}
ListElement{
text:"hello2"
}
ListElement{
text:"hello3"
}
}
这是我的菜单
Menu{
id:contextMenu
Repeater{
model: menuItems
MenuItem{}
}
我什至试着放一个 Instantiator
但菜单什么也没有显示
您只需像这样将每个 ListElement 的文本添加到您的 MenuItem 中:
Menu{
id:contextMenu
visible: true
Repeater {
model: menuItems
MenuItem {
text: modelData
}
}
}
我还在你的菜单中添加了“visible: true”来显示它(我不知道你是否在其他地方打开它)。
在查看文档后,我找到了实现该目标的方法:
Menu {
id: contextMenu
Instantiator {
model: menuItems
MenuItem {
text: model.text
}
// The trick is on those two lines
onObjectAdded: contextMenu.insertItem(index, object)
onObjectRemoved: contextMenu.removeItem(object)
}
}
我正在尝试从 ListModel
动态填充 Menu
,但这种方法不起作用(当我右键单击菜单时不会显示任何内容):
这是我的菜单项:
import QtQuick.Controls 1.3
ListModel{
id:menuItems
ListElement{
text:"hello1"
}
ListElement{
text:"hello2"
}
ListElement{
text:"hello3"
}
}
这是我的菜单
Menu{
id:contextMenu
Repeater{
model: menuItems
MenuItem{}
}
我什至试着放一个 Instantiator
但菜单什么也没有显示
您只需像这样将每个 ListElement 的文本添加到您的 MenuItem 中:
Menu{
id:contextMenu
visible: true
Repeater {
model: menuItems
MenuItem {
text: modelData
}
}
}
我还在你的菜单中添加了“visible: true”来显示它(我不知道你是否在其他地方打开它)。
在查看文档后,我找到了实现该目标的方法:
Menu {
id: contextMenu
Instantiator {
model: menuItems
MenuItem {
text: model.text
}
// The trick is on those two lines
onObjectAdded: contextMenu.insertItem(index, object)
onObjectRemoved: contextMenu.removeItem(object)
}
}