QAbstractAnimation Class

QAbstractAnimation 类是所有动画的基础。更多

头文件: #include <QAbstractAnimation>
CMake.QAbstractAnimation 类 find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
继承: QObject
继承于

QAnimationGroup,QPauseAnimation, 以及QVariantAnimation

公共类型

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() 直接设置。

在任何时候,动画都会处于三种状态之一:RunningStoppedPaused- 由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,QAnimationGroupThe Animation Framework

成员类型文档

enum QAbstractAnimation::DeletionPolicy

常数说明
QAbstractAnimation::KeepWhenStopped0停止时不会删除动画。
QAbstractAnimation::DeleteWhenStopped1动画停止时将自动删除。

enum QAbstractAnimation::Direction

该枚举用于描述Running 状态下的动画方向。

常量描述
QAbstractAnimation::Forward0动画的当前时间随时间增加(即从 0 开始向结束/持续时间方向移动)。
QAbstractAnimation::Backward1动画的当前时间随时间推移而缩短(即从结束/持续时间向 0 移动)。

另请参阅 direction

enum QAbstractAnimation::State

该枚举描述动画的状态。

常量说明
QAbstractAnimation::Stopped0动画未运行。这是QAbstractAnimation 的初始状态,也是QAbstractAnimation 结束后重新进入的状态。当前时间保持不变,直到调用setCurrentTime() 或调用start() 启动动画。
QAbstractAnimation::Paused1动画暂停(即暂时中止)。调用resume() 将恢复动画活动。
QAbstractAnimation::Running2动画正在运行。当控件处于事件循环中时,QAbstractAnimation 将定期更新其当前时间,并在适当的时候调用updateCurrentTime() 。

另请参阅 state() 和stateChanged()。

属性文档

[bindable read-only] currentLoop : int

注: 该属性支持QProperty 绑定。

该属性包含动画的当前循环

此属性描述动画的当前循环。默认情况下,动画的循环次数为 1,因此当前循环次数始终为 0。如果循环次数为 2,且动画运行超过了其持续时间,则动画会自动倒带并在当前时间 0 重新开始,当前循环次数为 1,以此类推。

当当前循环发生变化时,QAbstractAnimation 会发出currentLoopChanged() 信号。

[bindable] currentTime : int

注: 该属性支持QProperty 绑定。

该属性保存动画的当前时间和进度

此属性描述动画的当前时间。您可以通过调用 setCurrentTime 来更改当前时间,也可以调用start() 让动画运行,并在动画进行时自动设置当前时间。

动画的当前时间从 0 开始,到totalDuration() 结束。

注: 您可以将其他属性绑定到 currentTime,但不建议对其进行绑定。随着动画的进行,currentTime 会自动更新,从而取消绑定。

另请参阅 loopCountcurrentLoopTime()。

[bindable] direction : Direction

注: 该属性支持QProperty 绑定。

该属性用于保存动画在Running 状态下的方向。

该方向表示时间是从 0 开始向动画持续时间移动,还是在调用start() 后从持续时间值开始向 0 移动。

默认情况下,此属性设置为Forward

[read-only] duration : const int

此属性表示动画的持续时间。

如果持续时间为-1,则表示持续时间未定义。在这种情况下,loopCount 将被忽略。

访问函数:

virtual int duration() const = 0

[bindable] loopCount : int

注: 该属性支持QProperty 绑定。

该属性保存动画的循环次数

该属性以整数形式描述动画的循环次数。默认值为 1,表示动画只运行一次,然后停止。通过更改该值,可以让动画循环多次。如果数值为 0,动画将完全不运行;如果数值为-1,动画将永远循环,直到停止。不支持在未定义持续时间的动画上循环。动画只会运行一次。

[bindable read-only] state : State

注: 该属性支持QProperty 绑定。

动画的状态。

该属性描述动画的当前状态。当动画状态发生变化时,QAbstractAnimation 会发出stateChanged() 信号。

注意: 状态更新可能会导致currentTime 属性的更新,这反过来又会取消其绑定。因此,在设置currentTime 属性的绑定时,如果预期动画状态会发生变化,请务必小心。

成员函数文档

QAbstractAnimation::QAbstractAnimation(QObject *parent = nullptr)

构造 QAbstractAnimation 基类,并将parent 传递给QObject 的构造函数。

另请参阅 QVariantAnimationQAnimationGroup

[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 ,持续时间将是所有动画持续时间的总和。

注: 属性持续时间的获取函数。

另请参阅 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。在调用resume() 或start() 之前,currentTime 的值将保持不变。如果想从当前时间继续,请调用resume()。

另请参阅 start()、state() 和resume()。

[slot] void QAbstractAnimation::resume()

在动画暂停后恢复动画。动画恢复时,会发出 resumed() 和stateChanged() 信号。当前时间不会改变。

另请参阅 start()、pause() 和state()。

[slot] void QAbstractAnimation::setPaused(bool paused)

如果paused 为 true,动画将暂停。如果paused 为 false,动画将恢复。

另请参阅 state()、pause() 和resume()。

[slot] void QAbstractAnimation::start(QAbstractAnimation::DeletionPolicy policy = KeepWhenStopped)

启动动画。policy 参数说明动画完成后是否要删除。动画开始时,会发出stateChanged() 信号,而state() 会返回 Running。当控制到达事件循环时,动画将自行运行,并随着动画的进行定期调用updateCurrentTime() 。

如果动画当前停止或已经结束,调用 start() 会使动画倒带并从头开始。当动画结束时,动画会停止,或者如果循环级别大于 1,动画会倒带并从头开始。

如果动画已在运行,则此函数不会执行任何操作。

另请参阅 stop() 和state()。

[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() 信号。

另请参阅 start() 和state()。

int QAbstractAnimation::totalDuration() const

返回动画的总时长和有效时长,包括循环次数。

另请参阅 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 将调用此虚函数。

另请参见 start()、stop()、pause() 和resume()。

© 2025 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.