Qt Quick 状态#
创建和设置状态
创建状态#
要创建状态,请将该 State 对象添加到项的 states 属性,该项属性保留了一个状态列表。
警告信号组件可能有两种状态,即正态状态和关键状态。假设在正态状态下,信号的color
应该是绿色,警告标志处于关闭状态。而在关键状态下,信号的颜色应该是红色,标志处于开启状态。我们可以使用State
类型来建模状态,使用PropertyChanges
类型来配置颜色和标志。
Rectangle { id: signal width: 200; height: 200 state: "NORMAL" states: [ State { name: "NORMAL" PropertyChanges { target: signal; color: "green"} PropertyChanges { target: flag; state: "FLAG_DOWN"} }, State { name: "CRITICAL" PropertyChanges { target: signal; color: "red"} PropertyChanges { target: flag; state: "FLAG_UP"} } ] }
PropertyChanges类型将改变对象属性值。对象通过其ID引用。组件外的对象也通过id
属性引用,例如对外部flag
对象的属性更改。
进一步,状态可以通过将适当的信号状态赋给state
属性来改变。一个状态切换可以是MouseArea类型,每次信号接收到鼠标点击时分配不同的状态。
Rectangle { id: signalswitch width: 75; height: 75 color: "blue" MouseArea { anchors.fill: parent onClicked: { if (signal.state == "NORMAL") signal.state = "CRITICAL" else signal.state = "NORMAL" } } }
状态类型不仅仅限于对属性值进行修改,还可以
使用StateChangeScript运行一些脚本
使用PropertyChanges覆盖对象现有的信号处理程序
使用ParentChange重新引用Item
使用AnchorChanges修改锚点值
默认状态#
每个基于Item的组件都有一个state
属性和一个默认状态。默认状态是一个空字符串(""
),包含项的所有初始属性值。默认状态在管理状态更改之前的状态有助于管理属性值。将state
属性设置为空字符串将加载默认状态。
``when``
属性#
为了方便起见,State类型有一个可以绑定到表达式的when
属性,以便在绑定的表达式评估为true
时更改状态。当表达式评估为false时,when
属性将恢复到默认状态。
Rectangle { id: bell width: 75; height: 75 color: "yellow" states: State { name: "RINGING" when: (signal.state == "CRITICAL") PropertyChanges {target: speaker; play: "RING!"} } }
每当signal.state
为CRITICAL
时,bell
组件将更改为RINGING
状态。
动画状态更改#
状态变化引起值的变化。类型Transition允许在状态变化时实现更平滑的转变。在转变中,可以定义动画和插值行为。《动画和转变》文章提供了更多有关创建状态动画的信息。
动画示例演示了如何声明一组基本状态并在它们之间应用动画转变。
使用状态与Qt Quick行为解释了使用行为动画状态变化时遇到的一个常见问题。
状态快进#
为了使Transition正确地动画化状态变化,有时需要引擎在应用状态之前快进和回放一个状态(即在内部设置和取消设置状态)。这个过程如下所示
状态被快进以确定完整的结束值集。
状态被回放。
状态被完全应用,包括转变。
在某些情况下,这可能导致意外的行为。例如,改变视图的model或Loader的sourceComponent的状态可能将这些属性设置多次(应用到,回放,然后重新应用),这可能相对昂贵。
应该将状态快进视为实现细节,并且在后续版本中可能会变化。