1、概述
QPauseAnimation是Qt框架中的一个类,专门用于在动画序列中添加暂停效果。它继承自QAbstractAnimation,允许在动画组或动画序列中指定一个时间段的暂停。这对于创建复杂的动画序列非常有用,可以让动画在特定时刻暂停并保持状态。通过在QSequentialAnimationGroup或QParallelAnimationGroup中使用QPauseAnimation,可以精确地控制动画的播放节奏,使动画效果更加自然和流畅。
2、重要方法
QPauseAnimation类的主要方法包括:
- setDuration(int msecs):设置暂停的持续时间,单位为毫秒。暂停时间不应为负数,默认时间是250毫秒。
此外,QSequentialAnimationGroup提供了便利的方法addPause()和insertPause(),可以直接在动画组中添加指定毫秒数的暂停,而无需显式创建QPauseAnimation对象。
3、重要信号
QPauseAnimation类本身没有特定的信号,但它继承自QAbstractAnimation,因此具有QAbstractAnimation类的信号。这些信号可以用于监控动画的状态变化,例如动画开始、停止、暂停等。常用的信号包括:
- stateChanged(QAbstractAnimation::State newState, QAbstractAnimation::State oldState):当动画的状态发生变化时发出。newState表示新的状态,oldState表示旧的状态。
4、常用枚举类型
QPauseAnimation类本身没有定义新的枚举类型,但它继承自QAbstractAnimation,因此具有QAbstractAnimation类定义的枚举类型。其中,最重要的是QAbstractAnimation::State枚举,它表示动画的当前状态,包括:
- QAbstractAnimation::Stopped:动画已停止。
- QAbstractAnimation::Paused:动画已暂停。
- QAbstractAnimation::Running:动画正在运行。
#include <QApplication>
#include <QLabel>
#include <QPropertyAnimation>
#include <QPauseAnimation>
#include <QSequentialAnimationGroup>int main(int argc, char *argv[])
{QApplication app(argc, argv);QWidget window;window.setFixedSize(400, 300);QLabel *label = new QLabel("Hello, QPauseAnimation!", &window);label->setGeometry(50, 100, 200, 50);label->setAlignment(Qt::AlignCenter);// 创建属性动画,改变label的geometry属性QPropertyAnimation *animation1 = new QPropertyAnimation(label, "geometry");animation1->setDuration(1000);animation1->setStartValue(QRect(50, 100, 200, 50));animation1->setEndValue(QRect(150, 100, 200, 50));// 创建暂停动画QPauseAnimation *pauseAnimation = new QPauseAnimation(&window);pauseAnimation->setDuration(1000);// 创建另一个属性动画,继续改变label的geometry属性QPropertyAnimation *animation2 = new QPropertyAnimation(label, "geometry");animation2->setDuration(1000);animation2->setStartValue(QRect(150, 100, 200, 50));animation2->setEndValue(QRect(250, 100, 200, 50));// 创建串行动画组,并添加动画QSequentialAnimationGroup *animationGroup = new QSequentialAnimationGroup(&window);animationGroup->addAnimation(animation1);animationGroup->addAnimation(pauseAnimation);animationGroup->addAnimation(animation2);// 设置动画循环次数animationGroup->setLoopCount(2);// 启动动画animationGroup->start();window.show();return app.exec();
}
觉得有帮助的话,打赏一下呗。。
需要商务合作(定制程序)的欢迎私信!!