QML - SpinBox - 如何知道它是按下还是按下
QML - SpinBox - how to know if it's UP or DOWN pressed
我正在尝试在 QML 中创建自定义 CustomSpinBox
,我想根据要按下的按钮增加或减少 stepSize
的值。例如,如果我按下向上按钮,我想将值增加 X,如果我按下向下按钮,我想将值减小 Y。
我知道 up.pressed
和 down.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,等等。但是,如果您按下向下按钮,它将变为 0.9、0.8、0.7 .... 0.1 如果您再次按下向下按钮,它将变为 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
那里。
您应该使用 属性 组语法:
SpinBox
{
property bool isUpPressed: up.pressed
property bool isDownPresed: down.pressed
up.onPressedChanged: {
isUpPressed = up.pressed
}
down.onPressedChanged: {
isDownPresed = down.pressed
}
}
for Quick.Controls 1.上下行不行的地方可以用这个技巧:
SpinBox
{
property int oldValue: -1
onValueChanged: {
if (value > oldValue)
{
console.log("up")
}
else
{
console.log("down")
}
oldValue = value
}
}
我正在尝试在 QML 中创建自定义 CustomSpinBox
,我想根据要按下的按钮增加或减少 stepSize
的值。例如,如果我按下向上按钮,我想将值增加 X,如果我按下向下按钮,我想将值减小 Y。
我知道 up.pressed
和 down.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,等等。但是,如果您按下向下按钮,它将变为 0.9、0.8、0.7 .... 0.1 如果您再次按下向下按钮,它将变为 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
那里。
您应该使用 属性 组语法:
SpinBox
{
property bool isUpPressed: up.pressed
property bool isDownPresed: down.pressed
up.onPressedChanged: {
isUpPressed = up.pressed
}
down.onPressedChanged: {
isDownPresed = down.pressed
}
}
for Quick.Controls 1.上下行不行的地方可以用这个技巧:
SpinBox
{
property int oldValue: -1
onValueChanged: {
if (value > oldValue)
{
console.log("up")
}
else
{
console.log("down")
}
oldValue = value
}
}