QML的属性绑定
QML绑定方式有多种,简单来说有直接绑定、Binding绑定和Qt.Binding等方式,但是如果其中存在一个小坑就是绑定失效的问题,如果一个属性多次直接绑定,则会导致所有绑定都会失效。如果希望多次绑定的话可以按照Qt官方介绍的使用Qt.binding重新绑定,使当前绑定方式生效,后续不会失效。Qt官方也在property binding中介绍了这种情况,之前没有细看文档,遇到失效问题感到很纳闷。
Rectangle {
id: root
width: 20
height: root.width
border.width: 1
border.color: "#00ff00"
MouseArea {
anchors.fill: parent
onClicked: {
root.height = root.width * 3 // 这里在点击后会生效一次,后续height不在随width变化而变化了
// root.height = Qt.binding(function(){return this.width * 3 })
}
}
}
资料来源:
https://runebook.dev/cn/docs/qt/qtqml-syntax-propertybinding