在QML中动态创建ListModel

2024-01-15

当我需要在运行时创建任何 QML 组件时,我可以使用该指南:http://qt-project.org/doc/qt-5/qtqml-javascript-dynamicobjectcreation.html http://qt-project.org/doc/qt-5/qtqml-javascript-dynamicobjectcreation.html

即只需调用 Qt.createComponent 和 component.createObject

但我找不到如何在运行时创建ListModel?使用 qml,而不是使用 c++。

你可以问,为什么我需要它。所以,我有一个嵌套的 ListModel:有外模型,其中代表们包含内部模型。所以当我调用outer_model.append({})时,我必须传递新创建的ListModel内模型。我不能使用静态定义内模型在外部委托中,因为我无法在运行时访问此类模型。顺便问一下,可以以某种方式访问​​它吗?

附:也许尝试在 javascript 中管理模型是完全错误的想法?


我是一名编写 QtQuick 应用程序的 JS 开发人员,我已经尝试过多种解决方案。

在 QML 中用 JavaScript 管理模型的简短答案是这是一场噩梦。我建议您编写 QAbstractListModel 的一个小子类,它在内部使用QJsonArray http://qt-project.org/doc/qt-5/qjsonarray.html作为其数据源,这样可以更轻松地理解 C++ 中的数据结构及其在 QML 中的用法。按照说明从 C++ 创建 QML 类型here http://qt-project.org/doc/qt-5/qtqml-cppintegration-definetypes.html.

如果您仍然想在 JavaScript 中执行此操作,另一种方法如下:

function createNewList() {
    var newListModel = Qt.createQmlObject('import QtQuick 2.2; \
        ListModel {}', parent);
    return newListModel;
}

然而,即使在使用后,这也存在一些严重的内存泄漏问题gc()

如果您主要关心的是在 ListModels 中包含 ListModels,那么以下简单的事情对我有用(我认为 ListModels 中的对象数组和 ListModels 之间存在隐式类型转换)

property ListModel items: ListModel {}

function addComplexItem() {
    items.append({
        "key": "People",
        "arr": [
            {
             "arrItemName": "John",
             "arrItemValue": 18,
            },
            {
             "arrItemName": "Kerry",
             "arrItemValue": 21,
            },
            {
             "arrItemName": "Mike",
             "arrItemValue": 19,
            }    
        ]});
}


// Usage
Component {
    id: viewDelegate

    Item {
        Text {
            text: "List of " + key
        }
        ListView {
            model: arr
            delegate: Rectangle {
                Text { 
                    text: arrItemName
                } 
            }
        }  
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在QML中动态创建ListModel 的相关文章

随机推荐

  • 抽象类中的公共构造函数是代码吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 抽象类中的公共构造函数是代码吗 将构造函数设置为受保护可以提供您可以使用的所有访问权限 使其成为公共将提供的唯一额外访问权限是允许将类的实例声明
  • 如何导入 require.cache 和 require.resolve

    因为我在 package json 中使用模块类型或import而不是要求 我如何导入 require cache 和 require resolve 我正在尝试重新加载文件并更新所做的更改 error require is not def
  • Scala 类型(推理)问题?

    我正在 Scala 中使用以下方法开发 REST Web 服务Jersey http jersey java net JAX RS 参考实现 我收到一个奇怪的错误 我正在尝试创建一个内容配置 http jersey java net non
  • 更改单元格中部分文本的字体颜色

    我的单元格将包含以下值 Image not allowed png 我想改变颜色 png独自一人或之后发生的任何事情 现在我尝试使用下面的代码更改字体颜色 Cells 4 2 Font Color RGB 255 50 25 它将更改整个单
  • 在包含 AudioToolbox 框架的 Objective-C iOS 项目中找不到 AudioServices.h

    根据苹果文档 AudioServices h应该是AudioToolbox框架的一部分 尽管我已将 AudioToolbox 框架添加到我的 Xcode 项目中 但当我 import AudioServices 时 我收到错误 未找到 Au
  • 在 foreach 中强制转换为数组是否被认为是一种不好的做法?

    在启动 foreach 循环时转换为数组是否被认为是一种不好的做法 像这样的事情 foreach array examples as example Do stuff 这可以防止 为 foreach 提供的参数无效 免于发生 或者首先检查它
  • 如何使用Keras API提取“从输入层到隐藏层”和“从隐藏层到输出层”的权重?

    我是 Keras 新手 我正在尝试获取 Keras 中的权重 我知道如何在 Python 中的 Tensorflow 中执行此操作 Code data np array attributes int64 target np array la
  • MatMul 运算在张量流中如何工作?

    我注意到张量流中定义的 MatMul 运算 形状函数 Status MatMulShape shape inference InferenceContext c ShapeHandle a TF RETURN IF ERROR c gt W
  • 如何更改Mongo文档中嵌套字段的数据类型?

    我的 Mongo 结构如下 topProcesses cpuUtilizationPercent 0 0 processId 1 memoryUtilizationPercent 0 1 command init user root cpu
  • Firefox 中保存的密码发送空字段

    我在保存浏览器凭据时遇到问题 我第一次使用应用程序登录时 浏览器要求我保存字段 我按 确定 但是当我第二次登录并且浏览器使用保存的凭据填写表单字段时 我按登录 浏览器发送不带参数的请求 HTML div div
  • 如何使用所有处理器在 MPI 中发送/接收

    该程序使用 C Lagrange 和 MPI 编写 我是 MPI 新手 想要使用所有处理器进行一些计算 包括进程 0 为了学习这个概念 我编写了以下简单程序 但是这个程序在接收到进程0的输入后挂在底部 并且不会将结果发送回进程0 inclu
  • 通知图标在通知托盘上为白色

    我的通知托盘上的应用程序图标在 Android 5 上变成白色 我见过这个Android 5 Lollipop 中通知栏图标变白 https stackoverflow com questions 28387602 notification
  • 如何在 Windows 窗体应用程序中创建 Alt 快捷方式?

    我想为 Windows 窗体应用程序中的某些控件创建键盘快捷键 Example 注意带下划线的 F E V P B I have a label and a textbox control I d like to associate tha
  • 可以检测页面抓取吗?

    所以我刚刚创建了一个为我执行页面抓取的应用程序 并运行它 效果很好 我想知道是否有人能够弄清楚代码正在被页面抓取 无论他们是否为此目的编写了代码 我用java编写了代码 它几乎只是检查一行html代码 我想在向该程序添加更多代码之前我应该
  • CGContextClipToMask 返回空白图像

    我是石英新手 我有 2 个图像 一个背景和一个带有剪切形状的蒙版 我想将其放置在背景上以剪切出一部分 生成的图像应该是切口的形状 这是我的面具 中间的形状是 0 alpha 这是我的代码 UIView canvas sender super
  • 稍后发送电子邮件

    我想知道是否 v1 0 me sendMail具有延迟发送电子邮件的能力 在 Outlook 客户端中 您可以指定希望在稍后的日期和时间发送电子邮件 我四处探听 看看是否有一个属性可以在消息对象上设置来指示这一点 有人找到办法让它工作吗 当
  • iOS 在 UIWebView 表单输入中使用 UIKeyboardTypeDecimalPad

    我想用 显示小数点 在基于 cordova 的应用程序中本机应用程序使用的左上角 我见过很多使用私有 API 等的线程 但我想要一个可以用于应用程序商店提交的解决方案 任何帮助表示赞赏 我已经尝试过一些东西 this https stack
  • “范围错误:超出最大调用堆栈大小”为什么?

    如果我跑 Array apply null new Array 1000000 map Math random 在 Chrome 33 上 我得到 RangeError Maximum call stack size exceeded Wh
  • 如何在两个不同的核心数据模型之间共享实体

    我想知道如何在两个不同的核心数据模型之间共享实体 例如 我有一个 Universe 模型描述了 世界数据 以其 国家数据 另一方面 我有一个 人口 模型 它描述了 人类数据 以其 国家数据 我绝对希望将我的模型分开 提前致谢 你检查过了吗核
  • 在QML中动态创建ListModel

    当我需要在运行时创建任何 QML 组件时 我可以使用该指南 http qt project org doc qt 5 qtqml javascript dynamicobjectcreation html http qt project o