我一直在使用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 文件创建对象结构?