1

我一直在使用QQmlListProperty一种“主类”,它既是模型又是 qml 列表属性,允许对象主干的简单声明性标记,它可能与运行时一样可修改,也可能不可修改从动态结构生成/合并代码。我在这个答案中分享了一些近似的东西。

我对实际的实现细节一无所知,但触发我的“蜘蛛感”的是以下文档:

QQmlListProperty::QQmlListProperty(QObject *object, QList<T *> &list)- 我目前正在使用的状态是:

通常,此构造函数不应在生产代码中使用,因为可写 QList 违反了 QML 的内存管理规则。

我实现的原因QQmlListProperty是我想使用 qtquick 解析器/工厂或任何能够从常规 QML 代码创建模型数据的东西。当然,API 本身缺少插入和删除方法QQmlListProperty并不值得担心,因为预期目的不需要此类功能,即在执行过程中解析代码和创建对象,这样附加就足够了。我担心的原因是“可写 QList 违反了 QML 的内存管理规则”,因为最终结果稍后会被修改。并不是说追加也不符合写作的条件,但我仍然担心“违反 QML 的内存管理规则”可能产生的负面影响。

在一般情况下,似乎可以对通过解析 QML 文件创建的结构进行运行时更改并且没有问题,即使它具有 id,例如:

  Rectangle {
    width: 50
    height: 50
    Rectangle {
      id: c
      width: 10
      height: 10
      color: "red"
    }
    Rectangle {
      y: 20
      width: 10
      height: 10
      color: "red"
    }
    Component.onCompleted: c.destroy()
  }

但是在某些情况下,它确实说该对象不能被动态销毁或类似的东西。

QQmlListProperty那么,鉴于模糊的“可写 QList 违反 QML 的内存管理规则”警告,我是否可以安全地通过稍后实施和更改这些结构来从 QML 文件创建对象结构?

4

0 回答 0