0

我正在尝试在 QML 中创建一个自定义,并且我想根据要按下的按钮CustomSpinBox来增加或减少值。stepSize例如,如果我按下 UP 按钮,我想将值增加 X,如果我按下 DOWN 按钮,我想将值减少 Y。

我知道up.presseddown.pressed但这些只是属性,我怎样才能在stepSize函数中获取它们的值?

CustomSpinBox.qml

CustomSpinBox{
....
}

用法:

CustomSpinBox{
    id: maximumSpeed


    maximumValue: 100
    minimumValue: 0.01
    suffix: " " + qsTr("m/s")
    decimals: 3
    value: connection && connection.maxSpeed.value > 0 ? connection.maxSpeed.value : 1.5
    enabled: idOverrideDefault.checked

    stepSize: {
        // if UP is pressed return UP_VALUE
        // if DOWN is pressed return DOWN_VALUE
    }

    onValueChanged: {
        if (connection) {
            editor.handleSpeedRestriction(idOverrideDefault.checked, value)
        }
    }
}

更新:

好吧,我有一个数字,例如,1。如果你按下UP按钮会变成2、3、4,等等。但是,如果您按下 DOWN 按钮,它将变为 0.9, 0.8, 0.7 .... 0.1 如果您再次按下 DOWN 按钮,它将变为 0.09, 0.08, ... 0.01。我遇到的问题是,我不知道如何在不知道是向上还是向下的情况下实现这样的目标。

我的意思是,例如,如果我的值为 1,我希望如果我按下 UP,我的 stepSize 为 1,但如果我按下 DOWN 为 0.1,如果我的值为 0.1,则相同,如果我按下 UP,那么我的 stepSize 应该是 0.1,但如果我按下 DOWN 应该是 0.01。

由于这个问题,我需要知道每次按下哪个按钮。

此外,如果我正在尝试编写maximumSpeed.up.pressed将给我这个错误消息: Cannot read property 'pressed' of undefined 另外,如果我要定义我的财产内幕,CustomSpinBox例如这样的东西, property bool isUp: root.up.pressed那么这将永远不会被更新,所以我将永远false在那里。

4

1 回答 1

1

您应该将属性组语法用作:

SpinBox
{
    property bool isUpPressed: up.pressed
    property bool isDownPresed: down.pressed

    up.onPressedChanged: {
        isUpPressed = up.pressed
    }
    down.onPressedChanged: {
        isDownPresed = down.pressed
    }
}

对于 Quick.Controls 1. 在 up 和 down 不可用的情况下,可以使用这个技巧:

   SpinBox
    {
        property int oldValue: -1
      
        onValueChanged: {
            if (value > oldValue)
            {
                console.log("up")
            }
            else
            {
                console.log("down")
            }
            oldValue = value
        }
    }
于 2021-03-18T23:14:12.537 回答