目录
1. QPropertyAnimation
主要功能
示例
2. QVariantAnimation
主要功能
3. QAbstractAnimation
主要功能
4. QAnimationGroup
主要功能
5. QSequentialAnimationGroup
示例
6. QParallelAnimationGroup
示例
7. QEasingCurve
示例
8. 例子,实现一边移动一边变化
在 Qt 中,动画是通过 QPropertyAnimation
类来实现的,它允许你动画化 QObject 的属性。下面是对主要动画类的详解:
1. QPropertyAnimation
QPropertyAnimation
是 Qt 中用于动画化对象属性的主要类。它继承自 QVariantAnimation
,后者又继承自 QAbstractAnimation
。
主要功能
- 属性动画: 可以动画化 QObject 的属性,例如
pos
、size
、windowOpacity
等。 - 持续时间: 设置动画的持续时间(以毫秒为单位)。
- 开始和结束值: 设置动画的开始值和结束值。
- 缓动曲线: 可以使用
QEasingCurve
来控制动画的变化速度。
示例
QPropertyAnimation *animation = new QPropertyAnimation(&button, "pos");
animation->setDuration(1000);
animation->setStartValue(QPoint(0, 0));
animation->setEndValue(QPoint(200, 0));
animation->setEasingCurve(QEasingCurve::OutBounce); // 设置缓动曲线
animation->start();
2. QVariantAnimation
QVariantAnimation
是 QPropertyAnimation
的基类,它提供了通用的动画功能。通常不直接使用 QVariantAnimation
,而是通过 QPropertyAnimation
来动画化属性。
主要功能
- 值变化: 可以在动画过程中的不同时间点设置不同的值。
- 插值: 使用插值算法在开始值和结束值之间生成中间值。
3. QAbstractAnimation
QAbstractAnimation
是所有动画类的基类,提供了动画的基本功能。
主要功能
- 持续时间: 设置动画的总持续时间。
- 动画状态: 提供了动画的状态管理(如开始、暂停、停止)。
- 信号与槽: 提供了诸如
finished()
、stateChanged()
等信号,便于管理动画的状态。
4. QAnimationGroup
QAnimationGroup
是一个抽象类,用于管理一组动画。它的主要子类是 QSequentialAnimationGroup
和 QParallelAnimationGroup
。
主要功能
- 管理多个动画: 可以同时管理多个动画。
- 组合动画: 可以将多个动画组合在一起,按顺序或并行执行。
5. QSequentialAnimationGroup
QSequentialAnimationGroup
用于按顺序执行一组动画。
示例
QSequentialAnimationGroup *group = new QSequentialAnimationGroup;QPropertyAnimation *anim1 = new QPropertyAnimation(&button, "pos");
anim1->setDuration(1000);
anim1->setStartValue(QPoint(0, 0));
anim1->setEndValue(QPoint(200, 0));QPropertyAnimation *anim2 = new QPropertyAnimation(&button, "windowOpacity");
anim2->setDuration(1000);
anim2->setStartValue(1.0);
anim2->setEndValue(0.0);group->addAnimation(anim1);
group->addAnimation(anim2);
group->start();
6. QParallelAnimationGroup
QParallelAnimationGroup
用于并行执行一组动画。
示例
QParallelAnimationGroup *group = new QParallelAnimationGroup;QPropertyAnimation *anim1 = new QPropertyAnimation(&button, "pos");
anim1->setDuration(1000);
anim1->setStartValue(QPoint(0, 0));
anim1->setEndValue(QPoint(200, 0));QPropertyAnimation *anim2 = new QPropertyAnimation(&button, "windowOpacity");
anim2->setDuration(1000);
anim2->setStartValue(1.0);
anim2->setEndValue(0.0);group->addAnimation(anim1);
group->addAnimation(anim2);
group->start();
7. QEasingCurve
QEasingCurve
用于控制动画的变化速度。Qt 提供了多种缓动曲线,例如线性、缓入缓出、反弹等。
示例
QPropertyAnimation *animation = new QPropertyAnimation(&button, "pos");
animation->setDuration(1000);
animation->setStartValue(QPoint(0, 0));
animation->setEndValue(QPoint(200, 0));
animation->setEasingCurve(QEasingCurve::OutBounce); // 设置缓动曲线为反弹效果
animation->start();
8. 例子,实现一边移动一边变化
// 创建动画组QSequentialAnimationGroup *sequentialGroup = new QSequentialAnimationGroup;// 第一个动画 - 向右移动QPropertyAnimation *moveAnimation = new QPropertyAnimation(&button, "pos");moveAnimation->setDuration(1000);moveAnimation->setStartValue(QPoint(0, 0));moveAnimation->setEndValue(QPoint(200, 0));// 第二个动画 - 透明度变化QPropertyAnimation *fadeAnimation = new QPropertyAnimation(&button, "windowOpacity");fadeAnimation->setDuration(1000);fadeAnimation->setStartValue(1.0);fadeAnimation->setEndValue(0.0);// 将动画添加到组中sequentialGroup->addAnimation(moveAnimation);sequentialGroup->addAnimation(fadeAnimation);sequentialGroup->start(); // 开始动画组