Animation QML Type (Uncreatable)
是所有 QML 动画的基础。更多...
| Import Statement: | import QtQuick |
| Inherited By: | 23 typesAnchorAnimation, Animator, ColorAnimation, NumberAnimation, OpacityAnimator, ParallelAnimation, ParentAnimation, PathAnimation, PauseAnimation, PropertyAction, PropertyAnimation, QuaternionAnimation, RotationAnimation, RotationAnimator, ScaleAnimator, ScriptAction, SequentialAnimation, SmoothedAnimation, SpringAnimation, UniformAnimator, Vector3dAnimation, XAnimator, and YAnimator |
注意:这是一个不可创建的类型。无法在 QML 中实例化。
属性
- alwaysRunToEnd : bool
- loops : int
- paused : bool
- running : bool
信号
方法
详细说明
Animation 类型不能直接在 QML 文件中使用。它的作用是提供一组通用属性和方法,供所有继承自该类型的其他动画类型使用。若尝试直接使用 Animation 类型,将导致错误。
属性文档
alwaysRunToEnd : bool
该属性用于控制动画在被停止时是否应运行至结束。
如果该值为 true,则当动画被停止时(无论是通过将 `running ` 属性设置为 false,还是通过调用 `stop() ` 方法),动画将完成其当前迭代。`complete() ` 方法不受此值的影响。
当设置了loops 属性时,此行为最为有用,因为动画将正常播放完毕,但不会重新开始。
默认情况下,alwaysRunToEnd 属性未设置。
注意:alwaysRunToEnd 对过渡(Transition)中的动画没有影响。
loops : int
该属性用于指定动画应播放的次数。
默认情况下,loops 的值为 1:动画将播放一次后停止。
如果设置为 Animation.Infinite,动画将不断重复,直到被显式停止——无论是通过将running 属性设置为 false,还是通过调用stop() 方法。
在下面的示例中,矩形将无限循环旋转。
Rectangle {
width: 100; height: 100; color: "green"
RotationAnimation on rotation {
loops: Animation.Infinite
from: 0
to: 360
}
}paused : bool
该属性用于表示动画当前是否处于暂停状态。
可以通过将 `paused ` 属性设置为相应值,以声明式方式控制动画是否处于暂停状态。
还可以使用 JavaScript 中的 `pause() ` 和 `resume() ` 方法,以命令式的方式暂停和恢复动画。
默认情况下,动画不会被暂停。
running : bool
该属性用于表示动画当前是否正在运行。
可以通过设置running 属性,以声明式方式控制动画是否正在运行。以下示例将在按下MouseArea 时对矩形进行动画效果。
Rectangle {
width: 100; height: 100
NumberAnimation on x {
running: myMouse.pressed
from: 0; to: 100
}
MouseArea { id: myMouse }
}同样,可以通过读取running 属性来判断动画是否正在运行。在下面的示例中,Text 控件将显示动画是否正在运行。
NumberAnimation { id: myAnimation }
Text { text: myAnimation.running ? "Animation is running" : "Animation is not running" }此外,还可以通过 JavaScript 使用start() 和stop() 方法以命令式方式启动和停止动画。
默认情况下,动画处于未运行状态。不过,当动画通过on语法作为属性值来源被赋值给属性时,它们默认会被设置为运行状态。
Signal 文档
finished()
当动画自然结束时,会发出此信号。
当running 设置为false 时,以及当动画的loops 属性设置为Animation.Infinite 时,该信号不会被触发。
此外,该信号仅针对顶级、独立的动画发出。对于位于“行为”(Behavior)或“过渡”(Transition)中的动画,以及属于动画组的动画,该信号不会被触发。
如果alwaysRunToEnd 为true,则该信号不会在动画完成当前迭代之前被触发。
注意: 相应的处理程序 是onFinished 。
另请参阅 stopped()、started() 和running 。
started()
当动画开始时会触发此信号。
该信号仅在顶级、独立的动画中触发。对于位于“行为”或“过渡”中的动画,以及属于动画组的动画,该信号不会被触发。
注意: 对应的处理程序 为onStarted 。
stopped()
当动画结束时,会发出此信号。
动画可能是被手动停止的,也可能是已运行完毕。
该信号仅针对顶级、独立的动画触发。对于位于“行为”或“过渡”中的动画,以及属于动画组的一部分的动画,该信号不会被触发。
如果alwaysRunToEnd 为 true,则该信号不会在动画完成当前迭代之前发出。
注意: 相应的处理程序 是onStopped 。
方法文档
void complete()
停止动画,并跳转到最终的属性值。
如果动画未在运行,调用此方法将无效果。调用complete() 之后,running 属性将变为 false。
与 `stop()` 不同,`complete() ` 会立即将动画快进至结束。在下面的示例中,
Rectangle {
NumberAnimation on x { from: 0; to: 100; duration: 500 }
}在 250 毫秒时调用stop() 将导致x 属性取值为 50,而调用complete() 则会将x 属性设置为 100,这完全就像动画已播放完毕一样。
void pause()
暂停动画。
如果动画已暂停或running 为 false,调用此方法将无效果。调用pause() 后,paused 属性将变为true。
void restart()
重新启动动画。
这是一个便捷方法,相当于先调用stop() ,再调用start() 。
void resume()
恢复已暂停的动画。
如果动画未暂停或未处于running 状态,调用此方法将无效果。调用resume() 后,paused 属性将变为false。
void start()
启动动画。
如果动画已经在运行,调用此方法将不起作用。调用start() 之后,running 属性将设为 true。
void stop()
停止动画。
如果动画未运行,调用此方法将无效果。调用stop() 之后,running 和paused 这两个属性都将变为 false。
通常情况下,stop() 会立即停止动画,且动画不再对属性值产生影响。在此示例中,动画
Rectangle {
NumberAnimation on x { from: 0; to: 100; duration: 500 }
}在 250 毫秒时被停止,x 属性的值将为 50。
但是,如果设置了alwaysRunToEnd 属性,动画将持续运行直至完成,然后才停止。此时,running 属性仍会立即变为false。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.