【发布时间】:2014-04-07 02:43:22
【问题描述】:
我正在尝试实现一个健身应用程序,该应用程序显示当前锻炼名称,然后在休息期间显示一个进度条。当进度条填满时,显示下一个练习的名称,完成后显示进度条,以此类推。
请注意,我在此示例中使用了进度条,但在实际应用程序中我将拥有自己的小部件。
我的系统有两种状态:
- exercise进度条的值为0并保持为0
- rest在休息期间,进度条的值从 0 变为 maximumValue
原来是这样的:
- 应用程序处于“练习”状态并显示当前练习的名称
- 用户执行练习并在完成后单击进度条
- 应用程序切换到“休息”状态
- 用户在进度条完成时休息
- 进度条完成后,应用程序切换回“练习”状态并显示下一个练习的名称
我的问题在于第 5 步:我不知道如何在转换结束时切换回另一个状态。我尝试在 PropertyChanges 期间更改“状态”属性,并在使用 SequentialAnimation 的转换结束时对其进行计时,但我收到以下错误消息:
QML StateGroup:无法将状态更改应用为状态定义的一部分。
这里是一些示例代码:
import QtQuick 2.0
import QtQuick.Controls 1.1
ProgressBar {
id: root
width: 200
height: 48
minimumValue: 0
maximumValue: 100
value: 76
function switchState() {
if (state == "exercise")
{
state = "rest"
return
}
if (state == "rest")
{
state = "exercise"
return
}
}
state: "exercise"
states: [
State {
name: "exercise"
PropertyChanges {
target: root
value: 0
}
},
State {
name: "rest"
PropertyChanges {
target: root
value: maximumValue
// error: QML StateGroup: Can't apply a state change as part of a state definition.
// state: "exercise"
}
}
]
transitions: [
Transition {
to: "rest"
PropertyAnimation {
target: root
properties: "value"
duration: 1000
}
}
]
MouseArea {
anchors.fill: parent
onClicked: parent.switchState()
}
}
如何在状态转换结束时切换到另一个状态?
【问题讨论】:
-
一种选择是在最后触发一个计时器并从计时器滴答声中改变状态。