我找到了以下QML组件here:
state
我们称之为“MyRect.qml”。由于MyRect会覆盖Item {
id: root
MyRect {
id: inner
state: root.state // not safe
}
}
属性,因此将其绑定到属性将不起作用:
Item {
id: root
onStateChanged: inner.state = root.state // safe
MyRect {
id: inner
}
}
然而,分配它将起作用:
width
另一方面,绑定和分配对于MyRect.qml
的属性MyRect.qml
都是安全的。
integral_constant
的用户如何知道绑定哪些属性是安全的,哪些属性不必检查源代码?
答案 0 :(得分:1)
你不能。
特别是对于States
,将根节点状态用于内部状态是个坏主意。您应该使用隐藏(内部)对象的状态,或者您可以直接使用StateMachine
或StateGroup
s
除此之外,你需要诉诸Binding
- 对象。那些不能被覆盖。所以,如果你举个例子:
Item {
id: root
Binding {
target: inner
property: 'state'
value: root.state
}
MyRect {
id: inner
}
}
每次状态更改为根状态时,都应覆盖内部值。
通常,更重要的是确保不覆盖内部绑定,因此在创建可重用组件时,应使用Binding
- 对象,只要您希望将其中一个公开的属性绑定到内部值。