本页内容

QEasingCurve Class

QEasingCurve 类提供了用于控制动画的缓动曲线。更多内容...

头文件: #include <QEasingCurve>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

公共类型

EasingFunction
enum Type { Linear, InQuad, OutQuad, InOutQuad, OutInQuad, …, Custom }

公共函数

QEasingCurve(QEasingCurve::Type type = Linear)
QEasingCurve(const QEasingCurve &other)
QEasingCurve(QEasingCurve &&other)
~QEasingCurve()
void addCubicBezierSegment(const QPointF &c1, const QPointF &c2, const QPointF &endPoint)
void addTCBSegment(const QPointF &nextPoint, qreal t, qreal c, qreal b)
qreal amplitude() const
QEasingCurve::EasingFunction customType() const
qreal overshoot() const
qreal period() const
void setAmplitude(qreal amplitude)
void setCustomType(QEasingCurve::EasingFunction func)
void setOvershoot(qreal overshoot)
void setPeriod(qreal period)
void setType(QEasingCurve::Type type)
void swap(QEasingCurve &other)
QList<QPointF> toCubicSpline() const
QEasingCurve::Type type() const
qreal valueForProgress(qreal progress) const
QEasingCurve &operator=(QEasingCurve &&other)
QEasingCurve &operator=(const QEasingCurve &other)

静态公共成员

(since 6.12) QEasingCurve fromCubicBezier(QPointF c1, QPointF c2)
bool operator!=(const QEasingCurve &lhs, const QEasingCurve &rhs)
QDataStream &operator<<(QDataStream &stream, const QEasingCurve &easing)
bool operator==(const QEasingCurve &lhs, const QEasingCurve &rhs)
QDataStream &operator>>(QDataStream &stream, QEasingCurve &easing)

详细说明

缓动曲线描述了一种控制0到1之间插值速度的函数。与简单的恒定速度相比,缓动曲线能使一个值向另一个值的过渡显得更加自然。 QEasingCurve类通常与QVariantAnimation 和QPropertyAnimation 类配合使用,但也可以单独使用。它通常用于从零速度开始加速插值(渐入)或减速至零速度(渐出)。渐入和渐出也可以在同一个缓动曲线中结合使用。

为了计算插值的速度,缓动曲线提供了valueForProgress() 函数,其中progress 参数指定了插值的进度:0 表示插值的起始值,1 表示插值的结束值。 返回值即为插值的实际进度。如果对于所有输入值,返回值均与输入值相同,则该缓动曲线为线性曲线。这是默认行为。

例如,

QEasingCurve easing(QEasingCurve::InOutQuad);

for(qreal t= 0.0; t< 1.0; t+= 0.1)
    qWarning() << "Effective progress" << t << "is"
               <<easing.valueForProgress(t);

将输出 0 到 1 之间插值的实际进度。

使用 `QPropertyAnimation` 时,将使用关联的缓动曲线来控制 `startValue` 和 `endValue` 之间的插值进度:

QPropertyAnimation animation;
animation.setStartValue(0);
animation.setEndValue(1000);
animation.setDuration(1000);
animation.setEasingCurve(QEasingCurve::InOutQuad);

是否能够设置振幅、过冲或周期取决于 QEasingCurve 的类型。对于表现为弹簧特性的曲线(如弹性曲线和反弹曲线),可以访问振幅参数。更改振幅会改变曲线的高度。 仅弹性曲线支持周期设置,设置较大的周期会减缓回弹速度。只有具有“回力镖”行为的曲线(如InBack 、OutBack 、InOutBack 和OutInBack )才支持过冲设置。这些曲线会在插值过程中超出端点并返回端点,其行为类似于回力镖。

“缓动曲线示例”包含 QEasingCurve 类型的示例,并允许您更改曲线设置。

成员类型文档

QEasingCurve::EasingFunction

这是一个对具有以下签名函数的指针的typedef:

qreal myEasingFunction(qreal progress);

enum QEasingCurve::Type

平滑曲线的类型。

恒定值
QEasingCurve::Linear0

线性函数的图像。

线性(t)函数的衰减曲线:速度恒定。

常数值
QEasingCurve::InQuad1

一个非二次函数的图像。

二次(t²)函数的缓入/缓出曲线:从零速度开始加速。

常数值
QEasingCurve::OutQuad2

一个非二次函数的图像

二次(t²)函数的缓动曲线:减速至零速度。

常数值
QEasingCurve::InOutQuad3

二次函数 InOutquad 的图像

二次函数(t^2)的缓动曲线:加速至行程一半,随后减速。

常数值
QEasingCurve::OutInQuad4

二次函数 a OutInquad 的图像

二次函数(t²)的缓动曲线:在达到一半之前减速,之后加速。

常量值
QEasingCurve::InCubic5

InCubic 函数的图像

三次(t^3)函数的缓动曲线:从零速度开始加速。

常数值
QEasingCurve::OutCubic6

a OutCubic 函数的图形

三次(t^3)函数的缓减曲线:减速至零速度。

常数值
QEasingCurve::InOutCubic7

InOutCubic 函数的图像。

三次(t³)函数的缓动曲线:加速至中途,然后减速。

常数值
QEasingCurve::OutInCubic8

a OutInCubic 函数的图像。

三次(t^3)函数的缓入/缓出曲线:在达到一半之前减速,之后加速。

常数值
QEasingCurve::InQuart9

一个InQuartic函数的图像。

四次(t^4)函数的缓动曲线:从零速度开始加速。

常数值
QEasingCurve::OutQuart10

一个高次幂函数的图像。

四次(t^4)函数的缓动曲线:减速至零速度。

常数值
QEasingCurve::InOutQuart11

一个 InOutQuartic 函数的图像。

四次(t^4)函数的缓动曲线:先加速至半程,然后减速。

常数值
QEasingCurve::OutInQuart12

a OutInQuartic 函数的图像。

四次函数(t^4)的缓动曲线:在达到一半之前减速,之后加速。

常数值
QEasingCurve::InQuint13

一个五次函数的图形

五次(t^5)函数的缓入曲线:从零速度开始加速。

常数值
QEasingCurve::OutQuint14

一个五次函数的图像

五次(t^5)函数的缓减曲线:减速至零速度。

常数值
QEasingCurve::InOutQuint15

一个 InOutQuintic 函数的图像

五次(t^5)函数的缓减曲线:加速至中途,然后减速。

常数值
QEasingCurve::OutInQuint16

a OutInQuintic 函数的图像

五次(t^5)函数的缓入/缓出曲线:在达到一半之前减速,之后加速。

常数值
QEasingCurve::InSine17

一个非正弦函数的图像

正弦(sin(t))函数的缓动曲线:从零速度开始加速。

常数值
QEasingCurve::OutSine18

非正弦函数 a 的图像

正弦(sin(t))函数的缓动曲线:减速至零速度。

常数值
QEasingCurve::InOutSine19

一个 InOutSinusoidal 函数的图形

正弦(sin(t))函数的缓动曲线:加速至半程,随后减速。

常数值
QEasingCurve::OutInSine20

a OutInSinusoidal 函数的图像

正弦(sin(t))函数的缓动曲线:减速至中途,然后加速。

常量值
QEasingCurve::InExpo21

一个非指数函数的图像

指数函数(2^t)的缓入/缓出曲线:从零速度开始加速。

常数值
QEasingCurve::OutExpo22

a·OutExponential 函数的图形

指数函数 (2^t) 的缓动曲线:从零速度减速。

常数值
QEasingCurve::InOutExpo23

InOutExponential 函数的图形

指数函数 (2^t) 的缓动曲线:加速至行程一半,然后减速。

常量值
QEasingCurve::OutInExpo24

a OutInExponential 函数的图形

指数(2^t)函数的缓入/缓出曲线:在到达一半之前减速,之后加速。

常量值
QEasingCurve::InCirc25

InCircular 函数的图形

圆函数(sqrt(1-t^2))的缓动曲线:从零速度开始加速。

常数值
QEasingCurve::OutCirc26

a OutCircular 函数的图像

圆周运动(sqrt(1-t^2))函数的缓动曲线:减速至零速度。

常数值
QEasingCurve::InOutCirc27

InOutCircular 函数的图形

圆周运动(sqrt(1-t^2))函数的缓动曲线:先加速至半程,然后减速。

常量值
QEasingCurve::OutInCirc28

a OutInCircular 函数的图像

圆函数(sqrt(1-t^2))的缓入/缓出曲线:在达到一半之前减速,之后加速。

常量值
QEasingCurve::InElastic29

一个非弹性函数的图像

弹性(指数衰减正弦波)函数的缓动曲线:从零速度开始加速。峰值振幅可通过振幅参数设置,衰减周期可通过周期参数设置。

常量值
QEasingCurve::OutElastic30

a OutElastic 函数的图形

弹性(指数衰减正弦波)函数的缓和曲线:减速至零速度。峰值振幅可通过振幅参数设置,衰减周期可通过周期参数设置。

常量值
QEasingCurve::InOutElastic31

InOutElastic 函数的图像

弹性(指数衰减正弦波)函数的缓动曲线:加速至半程,随后减速。

常量值
QEasingCurve::OutInElastic32

a OutInElastic 函数的图形

弹性(指数衰减正弦波)函数的缓动曲线:减速至中途,然后加速。

常量值
QEasingCurve::InBack33

InBack 函数的图形

回弹(超调三次函数:(s+1)*t^3 - s*t^2)的缓入曲线:从零速度开始加速。

常量值
QEasingCurve::OutBack34

a OutBack 函数的图像

回弹(过冲立方函数:(s+1)*t^3 - s*t^2)的缓入曲线:从零速度开始加速。

常量值
QEasingCurve::InOutBack35

a的图形

InOutBack 函数}

回退的缓入/缓出曲线(超调三次函数:(s+1)*t^3 - s*t^2):加速至中途,然后减速。

常量值
QEasingCurve::OutInBack36

a OutInBack 函数的图像

回退的缓动曲线(超调三次缓动:(s+1)*t^3 - s*t^2),进出缓动:减速至中途,然后加速。

常量值
QEasingCurve::InBounce37

InBounce 函数的图像

弹跳的缓入/缓出曲线(指数衰减的抛物线弹跳)函数:从零速度开始加速。

常数值
QEasingCurve::OutBounce38

a OutBounce 函数的图像

反弹(指数衰减抛物线反弹)函数的缓动曲线:从零速度减速。

常数值
QEasingCurve::InOutBounce39

InOutBounce 函数的图形

弹跳(指数衰减抛物线弹跳)函数的缓入/缓出缓动曲线:加速至中途,然后减速。

常量值
QEasingCurve::OutInBounce40

a OutInBounce 函数的图形

反弹(指数衰减抛物线反弹)函数的缓入/缓出缓动曲线:减速至一半,然后加速。

常量值描述
QEasingCurve::BezierSpline45允许使用三次贝塞尔样条定义自定义缓入/缓出曲线
QEasingCurve::TCBSpline46允许使用 TCB 样条曲线定义自定义缓动曲线
QEasingCurve::Custom47如果用户通过setCustomType()指定了自定义曲线类型,则返回此值。请注意,不能使用此值调用setType(),但type()可能会返回此值。

另请参阅 addCubicBezierSegment() 和addTCBSegment()。

成员函数文档

QEasingCurve::QEasingCurve(QEasingCurve::Type type = Linear)

根据给定的type 生成一条缓动曲线。

QEasingCurve::QEasingCurve(const QEasingCurve &other)

创建other 的副本。

[noexcept] QEasingCurve::QEasingCurve(QEasingCurve &&other)

通过移动构造一个 QEasingCurve 实例,使其指向与other 所指向的相同对象。

[noexcept] QEasingCurve::~QEasingCurve()

析构函数。

void QEasingCurve::addCubicBezierSegment(const QPointF &c1, const QPointF &c2, const QPointF &endPoint)

添加一段三次贝塞尔样条,用于定义自定义缓入/缓出曲线。 仅当type()为QEasingCurve::BezierSpline 时才适用。请注意,该样条曲线默认从(0.0, 0.0)开始,且必须以(1.0, 1.0)结束,方为有效的缓动曲线。c1 和c2 是用于绘制曲线的控制点。endPoint 是曲线的终点。

另请参阅 fromCubicBezier()。

void QEasingCurve::addTCBSegment(const QPointF &nextPoint, qreal t, qreal c, qreal b)

添加一段 TCB 贝塞尔样条来定义自定义缓动曲线。仅当type() 为QEasingCurve::TCBSpline 时才适用。该样条必须明确从 (0.0, 0.0) 开始,并结束于 (1.0, 1.0),才能构成有效的缓动曲线。 张力参数t 用于调整切线向量的长度。连续性参数c 用于调整切线之间的变化陡峭度。偏移参数b 用于调整切线向量的方向。nextPoint 表示采样位置。这三个参数的有效范围均为 -1 到 1,共同定义控制点的切线。 如果这三个参数均为 0,则生成的样条曲线为 Catmull-Rom 样条曲线。起始点和终点的偏移量始终为 -1 和 1,因为外切线未定义。

qreal QEasingCurve::amplitude() const

返回振幅。此方法并非适用于所有曲线类型,仅适用于反弹曲线和弹性曲线(即由type()QEasingCurve::InBounce 、QEasingCurve::OutBounce 、QEasingCurve::InOutBounce 、QEasingCurve::OutInBounce 、QEasingCurve::InElastic 、QEasingCurve::OutElastic 、QEasingCurve::InOutElastic 或QEasingCurve::OutInElastic 生成的曲线)。

另请参阅 setAmplitude()。

QEasingCurve::EasingFunction QEasingCurve::customType() const

返回自定义缓动曲线的函数指针。如果 `type()` 未返回 `QEasingCurve::Custom`,则该函数将返回 0。

另请参阅 setCustomType()。

[static, since 6.12] QEasingCurve QEasingCurve::fromCubicBezier(QPointF c1, QPointF c2)

返回一条具有指定控制点c1 和c2 的三次贝塞尔曲线。

一条三次贝塞尔曲线由四个控制点定义:C0、C1、C2 和 C3。其中 C0 和 C3 分别对应起始位置和终点位置。 该函数返回一条起始点 C0 固定为 (0, 0)、终点 C3 固定为 (1, 1) 三次贝塞尔曲线。

这是一个便捷辅助函数,相当于调用addCubicBezierSegment(c1, c2,QPointF(1, 1))。如果您需要构建更复杂的三次贝塞尔样条,请改用addCubicBezierSegment()函数。

该函数在 Qt 6.12 中引入。

另请参阅 addCubicBezierSegment()。

qreal QEasingCurve::overshoot() const

返回超调量。此功能并非适用于所有曲线类型。仅当type() 的参数为QEasingCurve::InBack 、QEasingCurve::OutBack 、QEasingCurve::InOutBack 或QEasingCurve::OutInBack 时才适用。

另请参阅 setOvershoot()。

qreal QEasingCurve::period() const

返回周期。此方法不适用于所有曲线类型。仅当type() 的值为QEasingCurve::InElastic 、QEasingCurve::OutElastic 、QEasingCurve::InOutElastic 或QEasingCurve::OutInElastic 时才适用。

另请参阅 setPeriod()。

void QEasingCurve::setAmplitude(qreal amplitude)

将振幅设置为amplitude 。

这将设置弹跳的振幅或弹性“弹簧”效果的振幅。数值越大,振幅越高。

另请参阅 amplitude()。

void QEasingCurve::setCustomType(QEasingCurve::EasingFunction func)

设置由用户在函数func 中定义的自定义缓动曲线。 该函数的签名是 qreal myEasingFunction(qreal progress),其中progress和返回值被视为在 0 到 1 之间归一化。(在某些情况下,返回值可能超出该范围)调用此函数后,type() 将返回QEasingCurve::Custom 。func 不能是nullptr 。

另请参阅 customType() 和valueForProgress()。

void QEasingCurve::setOvershoot(qreal overshoot)

将超调量设置为overshoot 。

0 表示无超调,默认值 1.70158 会产生 10% 的超调。

另请参阅 overshoot()。

void QEasingCurve::setPeriod(qreal period)

将周期设置为period 。设置较小的周期值会使曲线频率较高;设置较大的周期值则会使曲线频率较低。

另请参阅 period()。

void QEasingCurve::setType(QEasingCurve::Type type)

将缓动曲线的类型设置为“type ”。

另请参阅 type()。

[noexcept] void QEasingCurve::swap(QEasingCurve &other)

将该曲线与other 进行交换。此操作速度极快,且绝不会失败。

QList<QPointF> QEasingCurve::toCubicSpline() const

返回定义自定义缓动曲线的 cubicBezierSpline 对象。如果缓动曲线没有自定义的贝塞尔缓动曲线,则该列表为空。

QEasingCurve::Type QEasingCurve::type() const

返回缓动曲线的类型。

另请参阅 ` setType()`。

qreal QEasingCurve::valueForProgress(qreal progress) const

返回progress 处缓动曲线的有效进度。虽然progress 必须在0到1之间,但返回的有效进度可以超出该范围。例如,QEasingCurve::InBack 在函数开始时会返回负值。

[noexcept] QEasingCurve &QEasingCurve::operator=(QEasingCurve &&other)

将other 通过“移动赋值”操作赋值给此QEasingCurve 实例。

QEasingCurve &QEasingCurve::operator=(const QEasingCurve &other)

复制other 。

相关非会员

[noexcept] bool operator!=(const QEasingCurve &lhs, const QEasingCurve &rhs)

比较缓和曲线lhs 与rhs ,若两者不相同,则返回true ;否则返回false 。该函数还会比较这两条曲线的属性。

另请参阅 operator==()。

QDataStream &operator<<(QDataStream &stream, const QEasingCurve &easing)

将给定的easing 曲线写入给定的stream ,并返回该流的引用。

警告: 不支持写入 QEasingCurve::Custom 类型的缓动曲线(即具有自定义缓动函数的曲线)。

另请参阅 《Qt 数据类型的序列化》。

[noexcept] bool operator==(const QEasingCurve &lhs, const QEasingCurve &rhs)

比较缓和曲线lhs 与rhs ,若两者相等则返回true ;否则返回false 。该函数还会比较这两条曲线的属性。

QDataStream &operator>>(QDataStream &stream, QEasingCurve &easing)

将给定的stream 中的缓动曲线读入到给定的easing 曲线中,并返回对该流的引用。

另请参阅 《Qt 数据类型的序列化》。

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