QAbstractAnimation 类是所有动画的基础。
Header: | #include <QAbstractAnimation> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Inherits: | QObject |
Inherited By: |
【详细描述】
★ QAbstractAnimation类定义所有动画共享的功能,通过继承这个类,可以引入QT动画框架以便自定义动画。
★ QT中,动画的进度由当前时间 (currentLoopTime()) 以毫秒为单位给出,从动画开始 (0) 到结束 (duration()),这个进度值始终在动画播放时自动更新。用户也可以用 setCurrentTime() 设置。
★ 动画在任何时候都处于以下三种状态之一: Running, Stopped, Paused ,由 State 枚举定义。可以通过调用 start(), stop(), pause() 或 resume()来更改当前状态。
★ 动画在启动时将始终重置。如果暂停,它将在恢复时以相同的当前时间 current time 继续。当动画停止时,它无法恢复,但会保持其当前时间(直到再次启动)。每当其状态发生变化时,QAbstractAnimation 都会发出 stateChanged() 。
★ 动画可以通过设置属性循环任意次数。当动画的当前时间达到其 loopCount 时,它将重置当前时间并继续运行。循环计数为 1(默认值)表示动画将运行一次。请注意,持续时间为 -1 表示动画将一直运行到停止,当前时间将无限增加。当当前时间等于 duration() 且动画处于最终循环时,进入 Stopped 状态,并发出 finished() 信号。
★ QAbstractAnimation 提供子类使用的纯虚函数来跟踪动画的进度: : duration() 和updateCurrentTime()。 duration() 函数允许您报告动画的持续时间(如上所述)。动画框架在当前时间更改时调用 updateCurrentTime()。通过重新实现此功能,您可以跟踪动画进度。请注意,调用之间的间隔和调用此函数的次数均未定义,不过,它通常是每秒 60 次更新。
★ 通过重新实现 updateState(),您可以跟踪动画的状态变化,这对于不受时间驱动的动画特别有用。
参见 QVariantAnimation, QPropertyAnimation, QAnimationGroup, and The Animation Framework
【公有类型】(枚举)
enum |
|
enum |
|
enum |
|
【属性】
属性名 | 简介 |
---|---|
currentLoop : int | 此属性保存动画的当前循环。默认情况下,动画的循环计数为 1,因此当前循环将始终为 0。如果循环计数为 2 并且动画运行超过其持续时间,它将在当前时间 0 和当前循环 1 处自动倒带并重新启动,依此类推。 |
currentTime : int | 此属性描述动画的当前时间。可以通过调用 setCurrentTime 来更改当前时间,也可以调用 start() 并让动画运行,随着动画的进行自动设置当前时间。 |
direction : Direction | 此属性在动画处于 Running 状态时保持动画的方向。 此方向指示时间是从 0 向动画持续时间移动,还是在调用 start() 后从持续时间值向 0 移动。 |
duration : const int | 此属性保存动画的持续时间。 如果持续时间为 -1,则表示持续时间未定义。在这种情况下,将被忽略。 |
loopCount : int | 此属性以整数形式描述动画的循环计数。默认情况下,此值为 1,表示动画应仅运行一次,然后停止。通过更改它,您可以让动画循环多次。如果值为 0,则动画将根本不运行,如果值为 -1,则动画将永远循环,直到停止。不支持在持续时间未定义的动画上循环。它只会运行一次。 |
state : State | 动画的状态。 此属性描述动画的当前状态。当动画状态发生变化时,发出stateChanged() 信号。 |
【公有函数】
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) | 每当方向改变时都会发出此信号。newDirection是新的方向。 |
void | finished() | 在动画停止并到达末尾后发出此信号。 |
void | stateChanged(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) | 每当动画的状态从 oldState 更改为newState时,就会发出此信号。 |
【受保护函数】
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 |