使用Qt Quick行为与状态¶
使用行为动画属性变化
使用带有状态的行为¶
在某些情况下,您可能会选择使用行为来动画化由状态变化引起的属性更改。虽然这在某些情况下效果很好,但在其他情况下可能会导致意外行为。
这里有一个展示问题的例子:
通过快速并反复地将鼠标移入和移出彩色矩形来测试示例,可以看到彩色矩形会逐渐变为绿色,而不会完全变回红色。这并不是我们想要的!问题出现的原因是我们使用了Behavior来动画化颜色的变化,而我们的状态变化是由鼠标进入或退出MouseArea触发的,这很容易被打断。
为了更正式地陈述问题,当同时使用状态和行为时,可能会导致意外行为:
Behavior 用于动画化属性更改,特别是在从显式定义的状态移回隐式基础状态时;
此行为可以被中断以(重新)进入一个明确定义的状态。
问题的发生是因为QML的基础状态定义方式:作为应用程序在进入明确定义状态之前的“快照”状态。在这种情况下,如果我们正在从绿色动画返回到红色的过程中,并中断动画以返回到“GreenState”,基础状态将包括其动画中间形式的颜色。
虽然未来版本的QML应该能够更优雅地处理这种情况,但目前有几种方法可以重新设计您的应用程序以避免此问题。
使用过渡来动画化变化,而不是使用行为。
使用条件绑定来更改属性值,而不是状态
仅使用明确定义的状态,而不是隐式的基础状态