QQmlListProperty - 可写QList违反了QML的内存管理规则吗?

时间:2016-09-19 19:28:27

标签: c++ qt qml qabstractlistmodel qqmllistproperty

我一直在一种“主类”中使用QQmlListProperty,它同时是一个模型和一个qml列表属性,允许对象骨干的简单声明性标记,这可能是也可能是不可修改以及动态结构中的代码的运行时生成/合并。我在this answer中分享了一些近似值。

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

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

  

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

我实现QQmlListProperty的原因是我想使用qtquick解析器/工厂或任何能够从常规QML代码创建模型数据的东西。当然,QQmlListProperty API本身缺少insert和remove方法并不是任何引起关注的问题,因为预期目的不需要这样的功能,即解析代码和创建对象,因为附加就足够了。我担心的原因是“可写QList违反了QML的内存管理规则”,因为最终结果将被修改。并非附加不符合写作的要求,但我仍然担心“违反QML的内存管理规则”可能带来的负面影响。特别是objects being destroyed while still in use遇到问题之后我偶然发现了。

在一般情况下,对于通过解析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文件创建对象结构吗?

0 个答案:

没有答案