[英]Property bindings getting lost in Qml when an Item accesses same value from different items in different files
在StackOverflow上有很多Qml属性问题,它们都与同一文件中的项目有关,并且可以通过直接使用Connections或Binding轻松解决。 但是,如果Qml对象由于缺少绑定而失去与外部的连接,会发生什么?
我创建了一个“ Spinner Slider”,这是一个具有相同值的Spinner和Slider:
SpinnerSlider.qml
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.3
RowLayout {
id: root
property alias value: sliderControl.value
property alias from: sliderControl.from
property alias to: sliderControl.to
Slider {
id: sliderControl
Layout.fillWidth: true
stepSize: 1
wheelEnabled: true
}
SpinBox {
id: spinBox
from: root.from
to: root.to
value: root.value
stepSize: sliderControl.stepSize
editable: true
onValueChanged: root.value = value
}
}
我想以以下方式使用,两个滑块,一个在另一个之上。 修改顶部的值应该更改底部的值,更改底部的值应该什么都不做。
main.qml
import QtQuick 2.12
import QtQuick.Window 2.12
Window {
Column {
anchors.fill: parent
SpinnerSlider {
id: outerSlider
from: 0
to: 500
value: 50
}
SpinnerSlider {
id: innerSlider
from: 0
to: 500
// Does Not Work
// value: outerSlider.value
// Works
Connections {
target: outerSlider
onValueChanged: innerSlider.value = outerSlider.value
}
// Works
Binding on value {
value: outerSlider.value
}
}
}
}
根据代码中的注释,如果我使用“常规”的方式连接Qml上的value: something.value
,则一旦更改SpinBox上的值,该代码将无法正常工作,因为onValueChange
将触发并且将通过有效地为其设置一个常量来删除属性绑定。
我真正想要的是能够使用value: outerSlider.value
方法。我尝试过的操作:SpinnerSlider.qml中的连接,Qt.bindings,Bindings on ..,但似乎没有任何作用。 有什么提示吗?
我设法通过多次使用Binding on
来修复代码。 这样,我不会破坏外部绑定。
Binding on value {
when: sliderControl.pressed
value: sliderControl.value
}
Binding on value {
when: spinBox.up.pressed
value: spinBox.value
}
Binding on value {
when: spinBox.down.pressed
value: spinBox.value
}
Binding on value {
when: spinBox.focus
value: spinBox.value
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.