向绑定属性的组件的用户发信号是不安全的

时间:2017-07-27 14:32:27

标签: qt qml qt5

我找到了以下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的用户如何知道绑定哪些属性是安全的,哪些属性不必检查源代码?

1 个答案:

答案 0 :(得分:1)

你不能。
特别是对于States,将根节点状态用于内部状态是个坏主意。您应该使用隐藏(内部)对象的状态,或者您可以直接使用StateMachine StateGroup s

除此之外,你需要诉诸Binding - 对象。那些不能被覆盖。所以,如果你举个例子:

Item {
    id: root

    Binding {
        target: inner
        property: 'state'
        value: root.state
    }

    MyRect {
        id: inner
    }
}

每次状态更改为根状态时,都应覆盖内部值。

通常,更重要的是确保不覆盖内部绑定,因此在创建可重用组件时,应使用Binding - 对象,只要您希望将其中一个公开的属性绑定到内部值。