You need to enable JavaScript to run this app. QML开发时MenuItem从模型赋值text属性失败如何解决
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 13:36:10