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

如何将QML中已填充的ListModel转换为字符串?

将QML ListModel转换为字符串的完整实现方案

你已经找对了方向,只需要补充几个细节就能完成ListModel到字符串的转换。核心思路是把ListModel中的每一项转成纯JavaScript对象(避开QML对象序列化的冗余问题),再统一序列化为JSON字符串。

完整实现函数

这里提供两种方案,你可以根据场景选择:

方案1:通用型(适配任意属性的ListModel项)

这个方案会自动遍历项的所有自定义属性,适合不确定ListModel项有哪些属性的场景:

function listModelToString(){
    var dataArray = []
    for (var i = 0; i < listModel.count; ++i){
        // 获取当前项的QML对象
        var qmlItem = listModel.get(i);
        // 转换为纯JavaScript对象,过滤QML内部属性
        var jsItem = {};
        for (var key in qmlItem) {
            if (qmlItem.hasOwnProperty(key)) {
                jsItem[key] = qmlItem[key];
            }
        }
        dataArray.push(jsItem);
    }
    // 序列化为带缩进的JSON字符串,第三个参数2是缩进空格数,可选
    return JSON.stringify(dataArray, null, 2);
}

方案2:精简型(已知ListModel项的固定属性)

如果你的ListModel项只有固定属性(比如示例中的aKey),可以直接构造对象,效率更高:

function listModelToString(){
    var dataArray = []
    for (var i = 0; i < listModel.count; ++i){
        dataArray.push({
            aKey: listModel.get(i).aKey
        });
    }
    return JSON.stringify(dataArray, null, 2);
}

测试调用示例

你可以在Component.onCompleted中添加测试代码,验证转换结果:

Component.onCompleted:{ 
    fillListModel();
    // 打印转换后的字符串到控制台
    console.log("ListModel转换结果:", listModelToString());
}

输出结果示例

运行后,控制台会输出格式化后的JSON字符串:

[
  {
    "aKey": "aKey0"
  },
  {
    "aKey": "aKey1"
  }
]

为什么要转成纯JS对象?

直接序列化listModel.get(i)返回的QML对象时,JSON可能会包含很多QML内部属性(比如objectName、parent等),转成纯JS对象可以确保只保留你定义的业务属性,得到干净的序列化结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:44:23