【发布时间】:2021-03-18 14:26:18
【问题描述】:
我正在尝试在 QML 中创建自定义 CustomSpinBox,并且我想根据要按下的按钮来增加或减少 stepSize 的值。例如,如果我按下 UP 按钮,我想将值增加 X,如果我按下 DOWN 按钮,我想将值减少 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 等等。但是,如果您按下 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 在那里。
【问题讨论】:
-
我认为根据按下的按钮更改
stepSize不会起作用。我希望当你更新它的值时,增加/减少函数已经被调用了。或者至少,您将无法依赖事件的顺序。我认为您将需要创建自己的按钮并手动告诉他们按下它们时要做什么。 -
有没有办法让我在 stepSize 函数中获得按下了哪个按钮?
-
类似的东西:
property var someValue: down.pressed ? -1 : (up.pressed ? 1 : 0)? -
这是个好主意,除了... 我如何更新我的属性?我的意思是,如果我要说这样的话,它将始终是
false,因为它将被初始化一次并且永远不会更新。在这种情况下,我该如何更新? -
我找不到像
up.onPressed这样的东西