我有Slider
。 value
从我的持久值中读取并onValueChanged
写入它。但是,将minimumValue
设置为1,在我onValueChanged
的初始访问权限之前调用value
。这会导致我的持久值始终被覆盖为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
}
}
有什么方法可以防止这种情况或以某种方式测试准备情况吗?
感谢。
答案 0 :(得分:1)
我认为解决此问题的最佳方法是使用bool来控制Slider
是否已完成,以便myPersistentValue
仅在Slider
完成后才会更改。
这样的事情:
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
。