在 Qt 中, 缓动曲线(Easing Curves) 用于控制动画的过渡效果,使动画的运动更加自然流畅。通过
QEasingCurve
类,Qt 提供了一系列预定义的缓动曲线类型,也支持自定义曲线。以下是关键知识点和示例:
一、QEasingCurve 的常见类型
Qt 内置了多种缓动曲线类型,例如:
- Linear: 线性匀速(无缓动)
- InQuad: 缓慢开始(加速)
- OutQuad: 缓慢结束(减速)
- InOutQuad: 先加速后减速
- InBack: 开始前略微回弹
- OutBounce: 结束时弹跳效果
- … 完整列表参考 Qt 文档
二、基本用法示例
在 QPropertyAnimation
中使用缓动曲线:
#include <QEasingCurve>
#include <QPropertyAnimation>
// 创建一个动画对象(例如移动按钮)
QPropertyAnimation *animation = new QPropertyAnimation(ui->pushButton, "pos");
animation->setDuration(1000); // 动画时长 1 秒
animation->setStartValue(QPoint(0, 0));
animation->setEndValue(QPoint(100, 100));
// 设置缓动曲线(例如使用 EaseInOutQuint)
animation->setEasingCurve(QEasingCurve::InOutQuint);
animation->start();
三、缓动曲线效果说明
- In 类型(如
InSine
):动画开始时速度较慢,逐渐加速。 - Out 类型(如
OutExpo
):动画结束时速度变慢,逐渐停止。 - InOut 类型(如
InOutCirc
):动画开始和结束均有速度变化。 - 自定义曲线:通过
QEasingCurve::setCustomType()
定义数学函数或贝塞尔曲线。
四、自定义缓动曲线
使用贝塞尔曲线定义自定义缓动:
QEasingCurve curve;
// 设置三次贝塞尔控制点(控制点需满足 0-1 范围)
curve.setCustomType([](qreal progress) {
return progress * progress; // 示例:二次函数加速
});
animation->setEasingCurve(curve);
五、可视化工具推荐
- Qt 官方文档:查看缓动曲线示意图。
- 在线工具:如 Easing Functions Cheat Sheet 动态演示不同曲线效果。
六、适用场景建议
- 菜单弹出:使用
OutBack
增加回弹效果。 - 页面切换:使用
InOutSine
平滑过渡。 - 加载动画:使用
Linear
保持匀速。
掌握缓动曲线能让动画更生动。