Qt5QML如何防止滑块初始值失控



我有一个Slidervalue从我的持久值中读取,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

相关内容

  • 没有找到相关文章