QML开发时MenuItem从模型赋值text属性失败如何解决
问题原因
- 你的Instantiator绑定的模型是普通字符串数组
contextMenu.strings,这类基础类型数组作为QML模型时,每个元素本身就是值,不存在text属性,访问model.text自然会得到undefined,从而触发「无法将undefined赋值给QString」的报错,MenuItem的文本也会为空。 - QML中当模型为字符串、数字等基础类型数组时,当前元素可以通过两种方式访问:直接使用
model关键字,或者使用默认内置的modelData变量。
解决方法
将MenuItem的text属性赋值修改为以下任意一种即可:
// 方式1:直接用model获取当前字符串 MenuItem { text: model }
或者
// 方式2:用modelData获取当前元素 MenuItem { text: modelData }
修改后完整可用代码示例:
MouseArea { acceptedButtons: Qt.RightButton anchors.fill: parent; onClicked: contextMenu.popup(); Menu { id: contextMenu property var strings: ["选项1", "选项2", "选项3"] Instantiator { model: contextMenu.strings MenuItem { text: model // 或替换为 text: modelData } onObjectAdded: contextMenu.insertItem(index, object) onObjectRemoved: contextMenu.removeItem(object) } } }
内容的提问来源于stack exchange,提问作者Tengiz
相关产品推荐
相关产品推荐

