我在名为ChildItem.qml
的文件中有这个:
Item{
property var childProperty
}
在另一个名为ParentItem.qml
的文件中,我创建了父项,并尝试将childProperty
绑定到父项的属性:
Item{
property ChildItem childItem: null
property var parentProperty
childItem.childProperty: parentProperty
}
在main.qml
中,我实例化两个对象并绑定父对子项的引用:
ApplicationWindow{
ChildItem{
id: childID
}
ParentItem{
id: parentID
childItem: childID
}
}
这会在Cannot assign a value directly to a grouped property
行上出现childItem.childProperty: parentProperty
错误。我通过更改父级来解决此问题:
Item {
property ChildItem childItem: null
property var parentProperty
//childItem.childProperty: parentProperty
onParentPropertyChanged: childItem.childProperty = parentProperty
}
但这看起来非常人为。是否有更好的方法来做到这一点或其他建议以另一种方式改变结构?
答案 0 :(得分:1)
childItem.childProperty: parentProperty
遗憾的是,这在QML语法中是不可能的,即使它很好。限制是绑定只能在元素本身的声明中定义,例如在这种情况下ChildItem { ... }
。作为解决方法,Binding元素可以在其他地方使用:
Binding {
target: childItem
property: "childProperty"
value: parentProperty
}
但是,诚然,这也是非常笨拙的。
我可能会尝试改变我的QML的结构,以避免首先陷入这种情况,可能是这样的:
ApplicationWindow{
ChildItem{
id: childID
childProperty: parentID.parentProperty
}
ParentItem{
id: parentID
}
}
答案 1 :(得分:-1)
好的,你的代码中有几个错误。逻辑和句法两者。
childItem.childProperty: parentProperty
这里不允许这一行,因为混合了声明性和命令式代码。如果childItem
为空,那么会是什么?替换为:
onChildItemChanged: {
if(childItem)
childItem.childProperty = parentProperty;
}
下一个错误:
childItem: childId
只需使用childId
重新childID
。