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
相关产品推荐
相关产品推荐

