我有一个Slider
。value
从我的持久值中读取,onValueChanged
向它写入。但是,将minimumValue
设置为1,会在value
的初始访问之前调用onValueChanged
。这导致我的持久值总是被覆盖为1。
例如
Slider
{
stepSize: 1
minimumValue: 1 // this happens before `value` regarless of order here
maximumValue: 5
value: myPersistentValue
onValueChanged:
{
// gets called *before* myPersistentValue is accessed and overwrites it!
myPersistentValue = value
}
}
有没有办法防止这种情况发生,或者以某种方式测试准备情况?
谢谢。
我认为解决这个问题的最佳方法是使用布尔来控制Slider
是否完成,因此只有在Slider
已经完成时才会更改myPersistentValue
。
类似这样的东西:
import QtQuick 2.5
import QtQuick.Controls 1.4
ApplicationWindow {
id: rootWindow
objectName: "window"
visible: true
width: 200
height: 200
property int myPersistentValue: 5
Slider
{
id: mySlider
stepSize: 1
minimumValue: 1
maximumValue: 5
value: myPersistentValue
property bool completed: false
onValueChanged:
{
console.log("slider - onValueChanged: " + myPersistentValue +
" value: " + value )
if (completed) {
console.log("slider - onValueChanged & completed: " + myPersistentValue +
" value: " + value )
myPersistentValue = value
}
}
Component.onCompleted: {
console.log("Slider completed!")
completed = true
}
}
Button
{
y: 50
text: "click me!"
onClicked: {
myPersistentValue = myPersistentValue - 1
console.log("button - onClicked: " + myPersistentValue)
}
}
}
如果QML标准组件有这些信息,我会很高兴,但恐怕没有。
顺便说一句,令人惊讶的是,如果将minimumValue
设置为小于或等于0,则行为会有所不同。在初始化期间,onValueChanged
只被调用一次,并且value
等于myPersistentValue
。