QEasingCurve Class
QEasingCurve 类提供用于控制动画的缓和曲线。更多
Header: | #include <QEasingCurve> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
- 所有成员(包括继承成员)的列表
- QEasingCurve 属于动画框架。
公共类型
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) |
相关非成员
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 类结合使用,但也可单独使用。它通常用于从零开始加速插值(ease in)或减速到零(ease out)。缓入和缓出也可以在同一条缓和曲线中组合使用。
为计算插值速度,缓和曲线提供了函数valueForProgress() ,其中progress 参数指定插值的进度:0 表示插值的起始值,1 表示插值的结束值。返回值是插值的有效进度。如果返回值与所有输入值的输入值相同,则缓和曲线为线性曲线。这是默认行为。
例如
QEasingCurveeasing(QEasingCurve::InOutQuad);for(qrealt= 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
这是一个指向函数指针的类型定义,其签名如下:
enum QEasingCurve::Type
宽松曲线的类型。
常数 | 值 |
---|---|
QEasingCurve::Linear | 0 |
线性 (t) 函数的缓和曲线:速度恒定。
恒定值 | 值 |
---|---|
QEasingCurve::InQuad | 1 |
二次函数 (t^2) 的缓和曲线:速度从零开始加速。
常数 | 值 |
---|---|
QEasingCurve::OutQuad | 2 |
二次函数 (t^2) 的缓和曲线:减速至零速度。
常数 | 值 |
---|---|
QEasingCurve::InOutQuad | 3 |
二次函数 (t^2) 的缓和曲线:加速到一半,然后减速。
常数 | 值 |
---|---|
QEasingCurve::OutInQuad | 4 |
二次函数 (t^2) 的缓和曲线:减速至一半,然后加速。
常数 | 值 |
---|---|
QEasingCurve::InCubic | 5 |
三次函数 (t^3) 的缓和曲线:从零加速。
常数 | 值 |
---|---|
QEasingCurve::OutCubic | 6 |
三次函数 (t^3) 的平缓曲线:减速至零速度。
常数 | 值 |
---|---|
QEasingCurve::InOutCubic | 7 |
三次函数 (t^3) 的缓和曲线:加速到一半,然后减速。
常数 | 值 |
---|---|
QEasingCurve::OutInCubic | 8 |
三次函数 (t^3) 的缓和曲线:减速至一半,然后加速。
常数 | 值 |
---|---|
QEasingCurve::InQuart | 9 |
四次函数 (t^4) 的缓和曲线:从零加速。
常数 | 值 |
---|---|
QEasingCurve::OutQuart | 10 |
四次函数 (t^4) 的平缓曲线:减速至零速度。
常数 | 值 |
---|---|
QEasingCurve::InOutQuart | 11 |
四次函数 (t^4) 的缓和曲线:加速到一半,然后减速。
常数 | 值 |
---|---|
QEasingCurve::OutInQuart | 12 |
四次函数 (t^4) 的缓和曲线:减速至一半,然后加速。
常数 | 值 |
---|---|
QEasingCurve::InQuint | 13 |
五次函数 (t^5) 的缓和曲线:从零开始加速。
常数 | 值 |
---|---|
QEasingCurve::OutQuint | 14 |
五次函数 (t^5) 的缓和曲线:减速至零速。
常数 | 值 |
---|---|
QEasingCurve::InOutQuint | 15 |
五次函数 (t^5) 的缓和曲线:加速到一半,然后减速。
常数 | 值 |
---|---|
QEasingCurve::OutInQuint | 16 |
五次函数 (t^5) 的缓和曲线:减速至一半,然后加速。
常数 | 值 |
---|---|
QEasingCurve::InSine | 17 |
正弦(sin(t))函数的缓和曲线:从零加速。
常数 | 值 |
---|---|
QEasingCurve::OutSine | 18 |
正弦 (sin(t)) 函数的平缓曲线:减速至零速度。
常数 | 值 |
---|---|
QEasingCurve::InOutSine | 19 |
正弦 (sin(t)) 函数的缓和曲线:加速到一半,然后减速。
恒定值 | 值 |
---|---|
QEasingCurve::OutInSine | 20 |
正弦 (sin(t)) 函数的缓和曲线:减速至一半,然后加速。
恒定值 | 值 |
---|---|
QEasingCurve::InExpo | 21 |
指数 (2^t) 函数的缓和曲线:从零加速。
常数 | 值 |
---|---|
QEasingCurve::OutExpo | 22 |
指数 (2^t) 函数的缓和曲线:减速至零速度。
常数 | 值 |
---|---|
QEasingCurve::InOutExpo | 23 |
指数 (2^t) 函数的缓和曲线:加速到一半,然后减速。
常数 | 值 |
---|---|
QEasingCurve::OutInExpo | 24 |
指数 (2^t) 函数的缓和曲线:减速至一半,然后加速。
常数 | 值 |
---|---|
QEasingCurve::InCirc | 25 |
圆 (sqrt(1-t^2)) 函数的缓和曲线:从零加速。
常数 | 值 |
---|---|
QEasingCurve::OutCirc | 26 |
圆 (sqrt(1-t^2)) 函数的平缓曲线:减速至零速度。
常数 | 值 |
---|---|
QEasingCurve::InOutCirc | 27 |
圆 (sqrt(1-t^2)) 函数的平缓曲线:加速到一半,然后减速。
常数 | 值 |
---|---|
QEasingCurve::OutInCirc | 28 |
圆 (sqrt(1-t^2)) 函数的平缓曲线:减速至一半,然后加速。
常数 | 值 |
---|---|
QEasingCurve::InElastic | 29 |
弹性(正弦波指数衰减)函数的缓和曲线:从零速度开始加速。可以用振幅参数设置峰值振幅,用周期参数设置衰减周期。
常数 | 值 |
---|---|
QEasingCurve::OutElastic | 30 |
弹性(指数衰减正弦波)函数的缓和曲线:减速至零速。峰值振幅可通过振幅参数设置,衰减周期可通过周期参数设置。
常数 | 值 |
---|---|
QEasingCurve::InOutElastic | 31 |
弹性(指数衰减正弦波)函数的缓和曲线:加速到一半,然后减速。
常数 | 值 |
---|---|
QEasingCurve::OutInElastic | 32 |
弹性(正弦波指数衰减)函数的缓和曲线:减速至一半,然后加速。
常数 | 值 |
---|---|
QEasingCurve::InBack | 33 |
反向(超调三次函数:(s+1)*t^3 - s*t^2)缓和曲线:从零加速。
常数 | 值 |
---|---|
QEasingCurve::OutBack | 34 |
后退(超调三次函数:(s+1)*t^3 - s*t^2)减速曲线:减速至零速度。
常数 | 值 |
---|---|
QEasingCurve::InOutBack | 35 |
后退的缓和曲线(超调三次函数:(s+1)*t^3 - s*t^2)缓入/缓出:加速至一半,然后减速。
常数 | 数值 |
---|---|
QEasingCurve::OutInBack | 36 |
后退的缓和曲线(超调三次函数缓和:(s+1)*t^3 - s*t^2),缓出/缓入:减速至中途,然后加速。
常数 | 值 |
---|---|
QEasingCurve::InBounce | 37 |
反弹(指数衰减抛物线反弹)函数的缓和曲线:从零开始加速。
常数 | 值 |
---|---|
QEasingCurve::OutBounce | 38 |
反弹(指数衰减抛物线反弹)函数的缓和曲线:从零开始减速。
常数 | 值 |
---|---|
QEasingCurve::InOutBounce | 39 |
弹跳(指数衰减抛物线弹跳)函数的缓进/缓出曲线:加速到一半,然后减速。
常数 | 值 |
---|---|
QEasingCurve::OutInBounce | 40 |
弹跳(指数衰减抛物线弹跳)函数的缓和曲线,缓出/缓入:减速至一半,然后加速。
常数 | 常数值 | 说明 |
---|---|---|
QEasingCurve::BezierSpline | 45 | 允许使用三次贝塞尔样条曲线定义自定义缓和曲线 |
QEasingCurve::TCBSpline | 46 | 允许使用 TCB 样条线定义自定义缓和曲线 |
QEasingCurve::Custom | 47 | 如果用户使用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 时才适用。c1 和c2 是绘制曲线时使用的控制点。endPoint 是曲线的端点。
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()。
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),其中进度和返回值被视为在 0 和 1 之间的正常值(在某些情况下,返回值可能超出此范围)。调用此函数type() 后,将返回QEasingCurve::Custom 。func 不能为零。
另请参见 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)
Move-assignsother 到此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 数据类型。
© 2025 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.