QEasingCurve 类
QEasingCurve 类提供了动画控制的缓动曲线。 更多...
头文件 | #include <QEasingCurve> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += core |
- 全部成员列表,包括继承的成员
- QEasingCurve 是 动画框架 的一部分。
公共类型
EasingFunction | |
枚举 | 类型 { 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 |
bool | operator!=(const QEasingCurve &other) const |
QEasingCurve & | operator=(const QEasingCurve &other) |
QEasingCurve & | operator=(QEasingCurve &&other) |
bool | operator==(const QEasingCurve &other) const |
相关非成员
QDataStream & | operator<<(QDataStream &stream, const QEasingCurve &easing) |
QDataStream & | operator>>(QDataStream &stream, QEasingCurve &easing) |
详细描述
缓动曲线描述了一个控制0到1之间插值速度的函数。缓动曲线让从一个值过渡到另一个值看起来比简单的恒定速度更自然。QEasingCurve类通常与QVariantAnimation和QPropertyAnimation类一起使用,但也可以单独使用。它通常用于加速从零速度(加速度进入)或减速到零速度(减速度退出)。加速度进入和减速度退出也可以在同一个缓动曲线上组合。
为了计算插值的速度,缓动曲线提供了一个函数valueForProgress(),其中进度参数指定了插值的进度: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时,相关的缓动曲线将被用来控制从起始值到结束值的插值进度。
QPropertyAnimation animation; animation.setStartValue(0); animation.setEndValue(1000); animation.setDuration(1000); animation.setEasingCurve(QEasingCurve::InOutQuad);
设置振幅、超调和周期的能力取决于QEasingCurve类型。振幅访问仅适用于弹簧式曲线,例如弹性曲线和弹跳曲线。更改振幅会改变曲线的高度。周期访问仅适用于弹性曲线,设置更高的周期会减慢弹跳的速度。只有具有“回旋”行为的曲线,如InBack、OutBack、InOutBack和OutInBack,才具有超调设置。这些曲线将超出终点并返回到终点,类似于回旋镖。
缓动曲线示例包含QEasingCurve类型的样本,并允许您更改曲线设置。
成员类型文档
QEasingCurve::EasingFunction
这是一个指向具有以下签名的函数的指针的typedef:
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 |
弹性函数(指数衰减正弦波)的缓解曲线:从零速度加速。峰值可以通过amplitude参数设置,衰减周期由period参数定义。
常量 | 值 |
---|---|
QEasingCurve::OutElastic | 30 |
弹性函数(指数衰减正弦波)的缓解曲线:减速至零速度。峰值可以通过amplitude参数设置,衰减周期由period参数定义。
常量 | 值 |
---|---|
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 |
后缩(超射三阶缓和:缓解出/入:减速至中点,然后加速。
常量 | 值 |
---|---|
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)
创建给定类型的缓动曲线。
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 是曲线的终点。
void QEasingCurve::addTCBSegment(const QPointF &nextPoint, qreal t, qreal c, qreal b)
添加TCB贝塞尔样条的一段来定义一个自定义缓动曲线。仅当typeQEasingCurve::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
返回超调值。此功能不适用于所有曲线类型。它仅适用于类型为QEasingCurve::InBack、QEasingCurve::OutBack、QEasingCurve::InOutBack或QEasingCurve::OutInBack。
另请参阅setOvershoot。
qreal QEasingCurve::period() const
返回周期。此功能不适用于所有曲线类型。它仅适用于类型为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不能为零。
另请参阅customType()和valueForProgress。
void QEasingCurve::setOvershoot(qreal overshoot)
将超调值设置为overshoot。
0产生无超调,默认值1.70158产生10%的超调。
另请参阅overshoot。
void QEasingCurve::setPeriod(qreal period)
设置周期为 period。将周期值设置得较小,会使曲线频率较高。周期值较大时,曲线频率较低。
另请参阅周期。
void QEasingCurve::setType(QEasingCurve::Type type)
设置缓动曲线的类型为 type。
另请参阅类型。
[noexcept]
void QEasingCurve::swap(QEasingCurve &other)
将曲线 other 与此曲线交换。此操作非常快速且永远不会失败。
QList<QPointF> QEasingCurve::toCubicSpline() const
返回定义自定义缓动曲线的三次贝塞尔样条曲线。如果缓动曲线没有定义自定义贝塞尔样条曲线,列表将为空。
QEasingCurve::Type QEasingCurve::type() const
返回缓动曲线的类型。
另请参阅setType。
qreal QEasingCurve::valueForProgress(qreal progress) const
返回在进度 progress 时缓动曲线的有效进度。虽然 progress 必须在0到1之间,但返回的有效进度可以超出这些界限。例如,QEasingCurve::InBack 在函数的开始会返回负值。
bool QEasingCurve::operator!=(const QEasingCurve &other) const
将此缓动曲线与 other 比较,如果不相等则返回 true
。它还会比较曲线的属性。
另请参阅operator==。
QEasingCurve &QEasingCurve::operator=(const QEasingCurve &other)
复制 other。
[noexcept]
QEasingCurve &QEasingCurve::operator=(QEasingCurve &&other)
将 other 移动赋值给此 QEasingCurve 实例。
bool QEasingCurve::operator==(const QEasingCurve &other) const
将此缓动曲线与 other 比较,如果相等则返回 true
。它还会比较曲线的属性。
相关非成员
QDataStream &<<(<span class="type">QDataStream &<i>stream</i>,const <span class="type">QEasingCurve &<i>easing</i>)<a class="plink" href="#operator-lt-lt-2" title="直接链接到此标题"></a>
将给定的<i translate="no">easing</i>曲线写入指定的<i translate="no">stream</i>,并返回对stream的引用。
另请参阅序列化Qt数据类型。
QDataStream &<>(<span class="type">QDataStream &<i>stream</i>,<span class="type">QEasingCurve &<i>easing</i>)<a class="plink" href="#operator-gt-gt-1" title="直接链接到此标题"</a>
从指定的<i translate="no">stream</i>读取缓动曲线到指定的<i translate="no">easing</i>曲线,并返回对stream的引用。
另请参阅序列化Qt数据类型。
<abbr title="版权">©</abbr> 2024 The Qt Company Ltd. 本文档中包含的贡献的版权归各自所有者所有。本文件内的文档是根据自由软件基金会公布并在<a href="http://www.gnu.org/licenses/fdl.html">GNU自由文档许可协议版本1.3发布的使用许可协议中的条款进行许可的。Qt及其相关标志为芬兰和/或其他国家的The Qt Company Ltd.的商标。所有其他商标均为其各自所有者的财产。