为什么';当我的QML属性绑定到Slider.value属性时,它是否会更新?
我有一个QML文档,其中有一个为什么';当我的QML属性绑定到Slider.value属性时,它是否会更新?,qml,blackberry-10,blackberry-cascades,Qml,Blackberry 10,Blackberry Cascades,我有一个QML文档,其中有一个int属性、一个滑块和一个按钮。我希望x始终具有与Slider.value相同的值。这是我的QML: Page { property int x: 1 content: Container { Slider { fromValue: 1 toValue: 500 value: x onValueChanged: {
int属性
、一个滑块
和一个按钮
。我希望x
始终具有与Slider.value
相同的值。这是我的QML:
Page {
property int x: 1
content: Container {
Slider {
fromValue: 1
toValue: 500
value: x
onValueChanged: {
console.log("Slider value is: "+value);
console.log("x value: "+x);
}
}
Button {
text: "Increment x"
onClicked: {
x=x+10;
}
}
}
}
当我按下按钮时,滑块值被更新,x
被更新。但是当我移动滑块时,x
的值不会更新。当我移动滑块时,x
的值为什么没有改变 试试这个:
Page {
property int x: **sliderID.value**
content: Container {
Slider {
**id: sliderID**
fromValue: 1
toValue: 500
value: x
onValueChanged: {
console.log("Slider value is: "+value);
console.log("x value: "+x);
}
}
Button {
text: "Increment x"
onClicked: {
x=x+10;
}
}
}
}
我建立了双向绑定。因为您的
x
未绑定到滑块。值
。当您将Slider.value
绑定到x
时,如果x
更改,Slider.value
也将更改,但如果Slider.value
更改(当您滑动它时),x
值将不会更改
要解决此问题,可以使用
使用onImmediateValueChanged信号而不是onValueChanged
...
onImmediateValueChanged: {
console.log("Slider value is: "+value);
console.log("x value: "+x);
}
...
不幸的是,在beta 4上,我得到了错误:
main.qml:4:1:qml bb::cascades::QmlPage_qml_0:Binding loop检测到属性“x”
当使用此方法时,它在更改滑块时工作正常,但当单击按钮时,value
和x
会得到不同的值(我仍然会收到“Binding loop detected”消息)1.非常感谢。这不是很理想,因为我实际上想要的是int
类型的属性,而不是real
类型的属性,这就是slider.value
的含义。但这很容易解决。@donturner:你到底想达到什么目的?如果要在按下按钮时更改值(如上面的示例),只需直接更改滑块.value
。Alias type主要用于将子对象的属性公开到顶层。我正在尝试使用滑块控制动画的速度,为此我需要一个整数值来指定动画的持续时间(毫秒)。我现在可以在Javascript中通过引用别名并将其转换为int来实现这一点。
...
onImmediateValueChanged: {
console.log("Slider value is: "+value);
console.log("x value: "+x);
}
...