QAbstractAnimation Class
QAbstractAnimation 类是所有动画的基类。更多内容...
| 头文件: | #include <QAbstractAnimation> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 继承自: | QObject |
| 继承自: |
- 所有成员列表(包括继承的成员)
- QAbstractAnimation 属于动画框架。
公共类型
| enum | DeletionPolicy { KeepWhenStopped, DeleteWhenStopped } |
| enum | Direction { Forward, Backward } |
| enum | State { Stopped, Paused, Running } |
属性
|
公共函数
| QAbstractAnimation(QObject *parent = nullptr) | |
| virtual | ~QAbstractAnimation() |
| QBindable<int> | bindableCurrentLoop() const |
| QBindable<int> | bindableCurrentTime() |
| QBindable<QAbstractAnimation::Direction> | bindableDirection() |
| QBindable<int> | bindableLoopCount() |
| QBindable<QAbstractAnimation::State> | bindableState() const |
| int | currentLoop() const |
| int | currentLoopTime() const |
| int | currentTime() const |
| QAbstractAnimation::Direction | direction() const |
| virtual int | duration() const = 0 |
| QAnimationGroup * | group() const |
| int | loopCount() const |
| void | setDirection(QAbstractAnimation::Direction direction) |
| void | setLoopCount(int loopCount) |
| QAbstractAnimation::State | state() const |
| int | totalDuration() const |
公共槽位
| void | pause() |
| void | resume() |
| void | setCurrentTime(int msecs) |
| void | setPaused(bool paused) |
| void | start(QAbstractAnimation::DeletionPolicy policy = KeepWhenStopped) |
| void | stop() |
信号
| void | currentLoopChanged(int currentLoop) |
| void | directionChanged(QAbstractAnimation::Direction newDirection) |
| void | finished() |
| void | stateChanged(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) |
受保护函数
| virtual void | updateCurrentTime(int currentTime) = 0 |
| virtual void | updateDirection(QAbstractAnimation::Direction direction) |
| virtual void | updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) |
重新实现的受保护函数
| virtual bool | event(QEvent *event) override |
详细说明
该类定义了所有动画共有的功能所使用的函数。通过继承该类,您可以创建自定义动画,并将其集成到动画框架的其他部分中。
动画的进度由其当前时间(currentLoopTime())决定,该时间以毫秒为单位,从动画开始(0)到结束(duration())进行计时。该值会在动画运行时自动更新,也可以通过setCurrentTime()直接设置。
动画在任何时刻都处于以下三种状态之一:Running 、Stopped 或Paused——这些状态由State 枚举定义。可以通过调用start()、stop()、pause() 或resume() 来更改当前状态。 动画在启动时总会重置其current time 。如果暂停,恢复后将从同一当前时间继续。当动画停止时,无法恢复,但会保留其当前时间(直到再次启动)。每当状态发生变化时,QAbstractAnimation都会发出stateChanged()事件。
通过设置loopCount 属性,动画可以循环播放任意次数。当动画的当前时间达到其duration()时,它将重置当前时间并继续运行。循环计数为1(默认值)表示动画将运行一次。 请注意,持续时间为 -1 表示动画将一直运行直至被停止;当前时间将无限增加。当当前时间等于duration() 且动画处于最后一个循环时,将进入Stopped 状态,并发出finished() 信号。
QAbstractAnimation 提供了子类用于跟踪动画进度的纯虚函数:duration() 和updateCurrentTime()。duration() 函数允许您报告动画的持续时间(如上所述)。当当前时间发生变化时,动画框架会调用updateCurrentTime()。通过重写此函数,您可以跟踪动画进度。 请注意,该函数的调用间隔和调用次数均未明确规定;不过,通常每秒会更新 60 次。
通过重写updateState(),您可以跟踪动画的状态变化,这对非时间驱动的动画尤为有用。
另请参阅 QVariantAnimation 、QPropertyAnimation 、QAnimationGroup 以及《动画框架》。
成员类型文档
enum QAbstractAnimation::DeletionPolicy
| 常数 | 值 | 描述 |
|---|---|---|
QAbstractAnimation::KeepWhenStopped | 0 | 动画在停止时不会被删除。 |
QAbstractAnimation::DeleteWhenStopped | 1 | 动画在停止时将被自动删除。 |
enum QAbstractAnimation::Direction
该枚举描述了动画处于Running 状态时的方向。
| 常量 | 值 | 描述 |
|---|---|---|
QAbstractAnimation::Forward | 0 | 动画的当前时间随时间增加(即从 0 开始,逐渐接近结束/持续时间)。 |
QAbstractAnimation::Backward | 1 | 动画的当前时间随时间推移而减少(即从结束/持续时间向 0 移动)。 |
另请参阅 direction 。
enum QAbstractAnimation::State
此枚举描述了动画的状态。
| 常量 | 值 | 描述 |
|---|---|---|
QAbstractAnimation::Stopped | 0 | 动画未运行。这是QAbstractAnimation 的初始状态,动画结束后将重新进入QAbstractAnimation 状态。当前时间将保持不变,直到调用setCurrentTime(),或者通过调用start()启动动画。 |
QAbstractAnimation::Paused | 1 | 动画处于暂停状态(即暂时中止)。调用resume() 将恢复动画运行。 |
QAbstractAnimation::Running | 2 | 动画正在运行。当控制权位于事件循环中时,QAbstractAnimation 会以固定间隔更新其当前时间,并在适当的时候调用updateCurrentTime()。 |
另请参阅 state() 和stateChanged()。
属性文档
[bindable read-only] currentLoop : int
注意:该 属性支持QProperty 绑定。
该属性表示动画的当前循环
该属性描述动画的当前循环。默认情况下,动画的循环次数为 1,因此当前循环始终为 0。如果循环次数为 2,且动画运行时间超过其持续时间,它将自动回退并从当前时间 0、当前循环 1 处重新开始,依此类推。
当当前循环号发生变化时,QAbstractAnimation 会发出currentLoopChanged() 信号。
访问函数:
| int | currentLoop() const |
通知器信号:
| void | currentLoopChanged(int currentLoop) |
[bindable] currentTime : int
注意:该 属性支持QProperty 绑定。
该属性保存动画的当前时间和进度
该属性描述了动画的当前时间。您可以通过调用 setCurrentTime() 来更改当前时间,或者调用start() 并让动画运行,系统会随着动画的进行自动设置当前时间。
动画的当前时间从 0 开始,以 `totalDuration()` 结束。
注意:您可以将 其他属性绑定到 currentTime,但不建议对其设置绑定。随着动画的进行,currentTime 会自动更新,这将导致其绑定失效。
访问函数:
| int | currentTime() const |
| void | setCurrentTime(int msecs) |
另请参阅 loopCount 和currentLoopTime()。
[bindable] direction : Direction
注意:此 属性支持QProperty 绑定。
当动画处于Running 状态时,该属性保存动画的方向。
该方向指示时间是從 0 向动画时长方向移动,还是在调用start() 之后,从时长值向 0 方向移动。
默认情况下,此属性设置为Forward 。
访问函数:
| QAbstractAnimation::Direction | direction() const |
| void | setDirection(QAbstractAnimation::Direction direction) |
通知信号:
| void | directionChanged(QAbstractAnimation::Direction newDirection) |
[read-only] duration : int
该属性存储动画的持续时间。
如果持续时间为 -1,则表示持续时间未定义。在这种情况下,loopCount 将被忽略。
访问函数:
| virtual int | duration() const = 0 |
[bindable] loopCount : int
注意:此 属性支持QProperty 绑定。
该属性用于存储动画的循环次数
该属性以整数形式表示动画的循环次数。默认值为 1,表示动画仅运行一次,然后停止。 通过更改该值,您可以让动画循环播放多次。当值为 0 时,动画将完全不运行;当值为 -1 时,动画将无限循环,直到被停止。对于持续时间未定义的动画,不支持循环播放。此类动画仅会运行一次。
访问函数:
| int | loopCount() const |
| void | setLoopCount(int loopCount) |
[bindable read-only] state : State
注意:此 属性支持QProperty 绑定。
动画的状态。
该属性描述动画的当前状态。当动画状态发生变化时,QAbstractAnimation 会发出stateChanged()信号。
注意:状态 更新可能会导致currentTime 属性的更新,进而可能取消其绑定。因此,当预计动画状态会发生变化时,请谨慎将绑定设置到currentTime 属性上。
访问函数:
| QAbstractAnimation::State | state() const |
通知器信号:
| void | stateChanged(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) |
成员函数文档
QAbstractAnimation::QAbstractAnimation(QObject *parent = nullptr)
构造 QAbstractAnimation 基类,并将parent 传递给QObject 的构造函数。
另请参阅 QVariantAnimation 和QAnimationGroup 。
[virtual noexcept] QAbstractAnimation::~QAbstractAnimation()
如果动画正在运行,则停止该动画,然后销毁QAbstractAnimation 。如果该动画属于QAnimationGroup 的一部分,则在销毁该动画之前会自动将其移除。
[signal] void QAbstractAnimation::currentLoopChanged(int currentLoop)
QAbstractAnimation 每当电流环发生变化时,都会发出此信号。currentLoop 即为电流环。
注意: 属性currentLoop的通知器 信号。
另请参阅 currentLoop() 和loopCount()。
int QAbstractAnimation::currentLoopTime() const
返回当前循环中的当前时间。其取值范围为 0 到duration()。
另请参阅 duration() 和currentTime 。
[signal] void QAbstractAnimation::directionChanged(QAbstractAnimation::Direction newDirection)
QAbstractAnimation 每当方向发生变化时,都会发出此信号。newDirection 表示新方向。
注意: 这是属性direction 的通知器 信号。
另请参阅 direction 。
[pure virtual] int QAbstractAnimation::duration() const
此纯虚拟函数返回动画的持续时间,并定义QAbstractAnimation 应更新当前时间的时间长度。该持续时间为局部变量,不包含循环计数。
返回值为 -1 表示该动画未定义持续时间;动画应无限期运行,直至被停止。这对于非时间驱动的动画,或难以预测其持续时间的动画(例如,游戏中的事件驱动音频播放)非常有用。
如果动画是并行QAnimationGroup ,则其持续时间将等于所有子动画中最长的持续时间;如果动画是顺序QAnimationGroup ,则其持续时间将等于所有子动画持续时间的总和。
注意: 属性 duration的获取 函数。
另请参阅 loopCount 。
[override virtual protected] bool QAbstractAnimation::event(QEvent *event)
重写了:QObject::event(QEvent *e)。
[signal] void QAbstractAnimation::finished()
QAbstractAnimation 在动画停止并到达结尾后触发此信号。
该信号在stateChanged() 执行后触发。
另请参阅 stateChanged()。
QAnimationGroup *QAbstractAnimation::group() const
如果该动画属于QAnimationGroup ,则该函数返回指向该组的指针;否则,返回nullptr 。
另请参阅 QAnimationGroup::addAnimation()。
[slot] void QAbstractAnimation::pause()
暂停动画。当动画被暂停时,state() 返回 Paused。currentTime 的值将保持不变,直到调用resume() 或start()。如果要从当前时间点继续播放,请调用resume()。
另请参阅 start()、state() 和resume()。
[slot] void QAbstractAnimation::resume()
在动画暂停后将其恢复。当动画恢复时,会发出stateChanged()信号。currentTime 属性不会发生变化。
另请参阅 start()、pause() 和state()。
[slot] void QAbstractAnimation::setPaused(bool paused)
如果paused 为真,则动画暂停;如果paused 为假,则动画恢复。
另请参阅 state()、pause() 和resume()。
[slot] void QAbstractAnimation::start(QAbstractAnimation::DeletionPolicy policy = KeepWhenStopped)
启动动画。policy 参数用于指定动画结束时是否应将其删除。动画启动时,会发出stateChanged()信号,且state()返回Running。当控制权回到事件循环时,动画将自动运行,并在动画进行过程中周期性地调用updateCurrentTime()。
如果动画当前处于暂停状态或已到达结尾,调用 start() 将重置动画并从头开始。当动画到达结尾时,动画将停止;或者,如果循环级别大于 1,则会重置并从头继续。
如果动画已经在运行,此函数将不执行任何操作。
[signal] void QAbstractAnimation::stateChanged(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)
QAbstractAnimation 每当动画状态从oldState 变为newState 时,都会发出此信号。该信号在调用虚拟函数updateState()之后发出。
注意: 这是属性state 的通知器 信号。
另请参阅 updateState()。
[slot] void QAbstractAnimation::stop()
停止动画。当动画停止时,它会发出stateChanged()信号,且state()返回Stopped。当前时间不会发生变化。
如果动画在到达末尾后自动停止(即currentLoopTime() ==duration() 且currentLoop() >loopCount() - 1),则会发出finished() 信号。
int QAbstractAnimation::totalDuration() const
返回动画的总时长和实际时长,包括循环次数。
注意:如果 循环次数非常大,或者单次循环的持续时间过长,总持续时间可能会过大,无法装入int 中。在这种情况下,该值将被限制为INT_MAX 。
另请参阅 duration() 和currentTime 。
[pure virtual protected] void QAbstractAnimation::updateCurrentTime(int currentTime)
每当动画的currentTime 发生变化时,都会调用此纯虚函数。
另请参阅 updateState()。
[virtual protected] void QAbstractAnimation::updateDirection(QAbstractAnimation::Direction direction)
当动画方向发生变化时,QAbstractAnimation 会调用此虚拟函数。direction 参数表示新的方向。
另请参阅 setDirection() 和direction()。
[virtual protected] void QAbstractAnimation::updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)
当动画状态从oldState 变为newState 时,QAbstractAnimation 会调用此虚拟函数。
© 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.