You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QML Repeater使用变量作为模型无输出问题求助(QT5.12.6)

解决QML Repeater无法使用字符串类型数组作为数据源的问题

你的问题出在变量X是字符串类型的数组文本,而Repeater的model需要的是实际的JavaScript数组对象,而非字符串形式的数组表示,所以直接赋值不会生成任何子项,也不会报错(QML对model的类型兼容较宽松,但字符串无法被识别为可遍历的数据源)。

解决方案1:在QML内将字符串转为数组对象

使用JSON.parse()方法把字符串格式的数组解析成真正的JS数组,直接作为Repeater的model:

Column {
    // 注意字符串外层用单引号,避免内部双引号的转义问题
    property string X: '["apples", "oranges", "pears"]'

    Repeater {
        model: JSON.parse(X)
        Text { text: "Data: " + modelData }
    }
}

如果你的X内部使用的是单引号,外层则用双引号,或者对内部引号做转义(比如"[\"apples\", ...]")。

解决方案2:在C端直接传递数组对象(如果X来自C)

如果X是从C传递到QML的字符串,建议在C端先将其解析为QVariantList再传递,这样QML无需额外处理即可直接使用:

#include <QJsonDocument>
#include <QVariantList>
#include <QQmlApplicationEngine>

// 示例代码
QString strArray = "[\"apples\", \"oranges\", \"pears\"]";
QJsonDocument jsonDoc = QJsonDocument::fromJson(strArray.toUtf8());
QVariantList dataList = jsonDoc.toVariant().toList();

// 将数组对象传递给QML
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("X", dataList);

此时QML中直接使用model: X就能正常生成Repeater的子项。

内容的提问来源于stack exchange,提问作者1x2x3x4x

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:11:05