【发布时间】:2017-03-27 08:47:28
【问题描述】:
以下代码:
Item{
onDataChanged: console.log("Data changed")
}
Item{
onResourcesChanged: console.log("Resources changed")
}
分别抛出Cannot assign to non-existent property "onDataChanged"和Cannot assign to non-existent property "onResourcesChanged"。
childrenChanged() 信号不是这种情况。原因是在qtdeclarative/src/quick/items/qquickitem.h 中,children 属性声明为:
Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQmlListProperty<QQuickItem> children READ children NOTIFY childrenChanged DESIGNABLE false)
但data 或resources 并非如此。它们被声明为:
Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQmlListProperty<QObject> data READ data DESIGNABLE false)
Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQmlListProperty<QObject> resources READ resources DESIGNABLE false)
没有changed() 信号。为什么这种设计选择是为了特别隐藏对不可见儿童所做的更改?此外,如何从 QML 中检测到data 的变化?
【问题讨论】:
标签: qt qml qtquick2 qt-signals qqmllistproperty