Qml 当状态被替换时做一些事情
我想在特定状态退出时更改一些属性或运行脚本 在形式上,我将使用一个变量来保存以前的状态。当状态更改时,检查以前的状态并确定是否运行脚本。但随着状态数的增加,代码将变得更加冗余。我如何简化这一点 e、 g.如何简化以下代码Qml 当状态被替换时做一些事情,qml,qtquick2,qt-quick,qtquickcontrols,qtquickcontrols2,Qml,Qtquick2,Qt Quick,Qtquickcontrols,Qtquickcontrols2,我想在特定状态退出时更改一些属性或运行脚本 在形式上,我将使用一个变量来保存以前的状态。当状态更改时,检查以前的状态并确定是否运行脚本。但随着状态数的增加,代码将变得更加冗余。我如何简化这一点 e、 g.如何简化以下代码 Item { property var work property var preState states: [ State { name: "state1"; ... },
Item {
property var work
property var preState
states: [
State {
name: "state1";
...
},
State {
name: "state2";
...
}
...
State {
name: "stateN";
...
}
]
onStateChanged: {
if (preState == "state1") {
...
} else if (preState == "state2") {
...
} else if (preState == "stateN") {
...
}
}
...
}
您可以使用onStateChanged信号进行此操作
Item {
id:stateTest
property var work
property var prevState
states: [
State {
name: "state1";
},
State {
name: "state2";
},
State {
name: "stateN";
}
]
onStateChanged: {
work="whatever"
prevState=state
}
Component.onCompleted: prevState=state
}
如果您希望尽可能使用它作为声明性的,您将避免在状态更改中使用脚本。相反,您可以声明,当输入新的
状态时,应该更改什么
为此,您可以提供一个元素列表
您还可以使用专门的更改更改更改来更改锚定
和父级父级
。如果需要运行脚本,正确的方法是使用元素
要设置更改的动画,请添加Transition
s
您可以找到有关State
s用法的更多信息
语法非常简单:
State {
name: 'myState1'
PropertyChanges { target: root; color: 'green' }
AnchorChanges { target: child; anchors.top: root.bottom }
// ... some more if necessary ...
}
使用Changes
的好处是,如果在脚本中设置,结果会自动成为绑定,而不是赋值。(无Qt.binding(…)
)