Qml项目状态:以前的状态
问题描述:
我想声明考虑到以前状态的状态。是否可以使用PropertyChanges
/StateChangeScript
之前的州名?Qml项目状态:以前的状态
Item {
states: [
State {
name: "s1"
StateChangeScript {
if (previous_state == "s2")
doSomething();
else
doSomethingElse();
}
},
State {
name: "s2"
},
State {
name: "s3"
}
]
}
答
因为@folibis建议,你可以使用一个属性来保存以前的状态。还有另一种方式来做到这一点使用ScriptAction:
Item {
states: [
State {
name: "s1"
},
State {
name: "s2"
},
State {
name: "s3"
}
]
transitions: [
Transition {
from: "s2"; to: "s1"
ScriptAction {
script: doSomething()
}
},
Transition {
from: "s3"; to: "s1"
ScriptAction {
script: doSomethingElse()
}
}
]
}
答
在研究这个问题,我找到了另一种解决方案可能惠及任性的Google员工在绊此线程。
其他声明的答案要求您为每个状态定义一个转换,这对于具有多个状态的较大程序来说变得不方便。
此外,至少在目前QML,
onStateChanged: previousState = state
导致previousState保持当前状态,而不是前一个。
所以,我的解决方案:
//within main:
property string previous_state: ""
property string current_state: "default_state"
Transition{
PropertyAction {target: main; property: "previous_state"; value: main.current_state}
PropertyAction {target: main; property: "current_state"; value: main.state}
}
previous_state会一直保存先前的状态,并且不需要你定义为你拥有的每一个状态过渡新。
一个警告是你必须将current_state设置为任何默认状态,所以previous_state在第一次之后是正确的,而不是第二次转换。
为什么不在改变之前保存当前状态? '属性字符串previousState onStateChanged: previousState =状态' – folibis
我不介意onStateChanged,谢谢 – morte