Qt5 QML如何防止Slider流氓初始值

时间:2016-04-12 11:11:59

标签: qt qml qt5

我有Slidervalue从我的持久值中读取并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
    }
}

有什么方法可以防止这种情况或以某种方式测试准备情况吗?

感谢。

1 个答案:

答案 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