QTimeLine 类
QTimeLine 类提供用于控制动画的时间线。 更多...
头文件 | #include <QTimeLine> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += core |
继承 | QObject |
- 成员列表,包括继承自父类的成员
- QTimeLine 是动画框架的一部分。动画框架
公共类型
属性
|
|
公共函数
QTimeLine(int duration = 1000, QObject *parent = nullptr) | |
virtual | ~QTimeLine() |
QBindable<int> | bindableCurrentTime() |
QBindable<QTimeLine::Direction> | bindableDirection() |
QBindable<int> | bindableDuration() |
QBindable<QEasingCurve> | bindableEasingCurve() |
QBindable<int> | bindableLoopCount() |
QBindable<int> | bindableUpdateInterval() |
int | currentFrame() const |
int | currentTime() const |
qreal | currentValue() const |
QTimeLine::Direction | direction() const |
int | duration() const |
QEasingCurve | easingCurve() const |
int | endFrame() const |
int | frameForTime(int msec) const |
int | loopCount() const |
void | setDirection(QTimeLine::Direction direction) |
void | setDuration(int duration) |
void | setEasingCurve(const QEasingCurve &curve) |
void | setEndFrame(int frame) |
void | setFrameRange(int startFrame, int endFrame) |
void | setLoopCount(int count) |
void | setStartFrame(int frame) |
void | setUpdateInterval(int interval) |
int | startFrame() const |
QTimeLine::State | state() const |
int | updateInterval() const |
virtual qreal | valueForTime(int msec) const |
公共槽。
信号。
void | 完成() |
void | frameChanged(int frame) |
void | stateChanged(QTimeLine::State newState) |
void | valueChanged(qreal value) |
重实现的保护函数。
virtual void | timerEvent(QTimerEvent *event) override |
详细信息。
它通常用于通过周期性地调用槽来动画化GUI控件。您可以通过将持续时间的毫秒传递给QTimeLine的构造函数来构建时间线。时间线的持续时间描述了动画将运行多长时间。然后通过调用setFrameRange()设置合适的帧范围。最后,将frameChanged()信号连接到您想要动画化的小部件中的合适槽(例如,在QProgressBar中的setValue())。当调用start()时,QTimeLine将进入运行状态,并定期发出frameChanged(),导致您的小部件连接的属性值以稳定速度从下限增长到上限。您可以通过调用setUpdateInterval()指定更新间隔。完成时,QTimeLine进入未运行状态,并发出finished()。
示例
... progressBar = new QProgressBar(this); progressBar->setRange(0, 100); // Construct a 1-second timeline with a frame range of 0 - 100 QTimeLine *timeLine = new QTimeLine(1000, this); timeLine->setFrameRange(0, 100); connect(timeLine, &QTimeLine::frameChanged, progressBar, &QProgressBar::setValue); // Clicking the push button will start the progress bar animation pushButton = new QPushButton(tr("Start animation"), this); connect(pushButton, &QPushButton::clicked, timeLine, &QTimeLine::start); ...
默认情况下,时间线从头到尾运行一次,在运行结束后必须再次调用start()以从头开始。为了使时间线循环,您可以通过调用setLoopCount(),传递时间线应运行多少次才结束的次数。您也可以通过调用setDirection()改变方向,使时间线向后运行。您还可以在运行时通过调用setPaused()暂停和恢复时间线。为了提供互动控制,提供了setCurrentTime()函数,该函数直接设置时间线的位置。尽管此函数在未运行状态(例如,连接到QSlider中的valueChanged()信号)时最有用,但此函数可以在任何时候调用。
帧接口对标准小部件很有用,但QTimeLine可以用于控制任何类型的动画。QTimeLine的核心是valueForTime()函数,它为给定的时间生成0到1之间的值。此值通常用于描述动画的步骤,其中0是动画的第一步,而1是最后一步。在运行时,QTimeLine通过调用valueForTime()和发出valueChanged()生成0到1之间的值。默认情况下,valueForTime()应用插值算法生成这些值。您可以通过调用setEasingCurve()从一组预定义的时间线算法中选择。
请注意,默认情况下,QTimeLine 使用 QEasingCurve::InOutSine,此曲线提供的值增长缓慢,然后稳定增长,最后再次缓慢增长。对于自定义时间线,您可以重新实现 valueForTime(),在这种情况下,QTimeLine 的 easingCurve 属性将被忽略。
另请参阅QProgressBar 和 QProgressDialog。
成员类型文档
枚举 QTimeLine::Direction
此枚举描述了时间线在 运行 状态下的方向。
常量 | 值 | 描述 |
---|---|---|
QTimeLine::Forward | 0 | 时间线的当前时间随着时间的增长而增长(即从 0 增长到截止时间/持续时间)。 |
QTimeLine::Backward | 1 | 时间线的当前时间随着时间的减少而减少(即从截止时间/持续时间减小到 0)。 |
另请参阅setDirection。
枚举 QTimeLine::State
此枚举描述了时间线的状态。
常量 | 值 | 描述 |
---|---|---|
QTimeLine::NotRunning | 0 | 时间线未运行。这是 QTimeLine 的初始状态,并且当完成时 QTimeLine 重新进入此状态。当前时间、帧和值在调用 setCurrentTime() 或通过调用 start() 开始时间线之前保持不变。 |
QTimeLine::Paused | 1 | 时间线已暂停(即,暂时挂起)。调用 setPaused(false) 将重新启动时间线活动。 |
QTimeLine::Running | 2 | 时间线正在运行。当控制权在事件循环中时,QTimeLine 将定期更新其当前时间,并在适当的时候发出 valueChanged() 和 frameChanged() 信号。 |
另请参阅state() 和 stateChanged。
属性文档
[可绑定]
currentTime : int
注意:此属性支持 QProperty 绑定。
此属性保持时间线的当前时间。
当 QTimeLine 处于运行状态时,此值作为一个函数随着时间的持续性和方向不断更新。否则,它是 stop() 上次调用时的值,或者通过 setCurrentTime() 设置的值。
注意:您可以将其他属性绑定到 currentTime,但不建议您为此设置绑定。随着动画的进行,currentTime 会自动更新,从而取消其绑定。
默认情况下,此属性包含的值为 0。
[可绑定]
direction : Direction
注意:此属性支持 QProperty 绑定。
此属性保持时间线在 QTimeLine 处于 运行 状态时的方向。
此方向表示时间是否从 0 移动到时间线的持续时间,或是否在调用 start() 之后从持续时间移动到 0。
方向的任何绑定都将不被仅 setDirection() 移除,toggleDirection() 也会移除。
默认情况下,此属性设置为 正向。
[可绑定]
duration : int
注意:此属性支持 QProperty 绑定。
此属性包含时间轴的总时长(毫秒为单位)。
默认情况下,此值为1000(即,1秒),但您可以通过将时长传递给QTimeLine构造函数或调用setDuration()来更改此值。时长必须大于0。
注意:更改时长不会将当前时间重置为零或新时长。您还需要调用带有所需值的setCurrentTime()。
[可绑定]
easingCurve : QEasingCurve
注意:此属性支持 QProperty 绑定。
指定时间轴将使用的缓动曲线。如果重写了valueForTime(),则此值被忽略。
另请参阅:valueForTime
[可绑定]
loopCount : int
注意:此属性支持 QProperty 绑定。
此属性包含时间轴完成前应循环的次数。
循环计数为0表示时间轴将无限循环。
默认情况下,此属性的值为1。
[可绑定]
updateInterval : int
注意:此属性支持 QProperty 绑定。
此属性包含每次QTimeLine更新其当前时间之间的时间(毫秒)。
更新当前时间时,如果当前值发生变化,QTimeLine将发出valueChanged(),如果帧发生变化,则发出frameChanged()。
默认情况下,间隔为40 ms,相当于每秒更新25次。
成员函数文档
[显式]
QTimeLine::QTimeLine(int duration = 1000, QObject *parent = nullptr)
以duration毫秒的时长构造时间轴。parent传递给QObject构造函数。默认时长为1000毫秒。
[虚函数 noexcept]
QTimeLine::~QTimeLine()
销毁时间轴。
int QTimeLine::currentFrame() const
返回与当前时间对应的帧。
另请参阅:currentTime(),frameForTime()和setFrameRange()
qreal QTimeLine::currentValue() const
返回与当前时间对应的值。
另请参阅:valueForTime()和currentFrame()
int QTimeLine::endFrame() const
返回结束帧,即时间轴结束时的帧(即当前值为1的帧)。
另请参阅:setEndFrame()和setFrameRange()
[私有信号]
void QTimeLine::finished()
当QTimeLine完成(即达到时间线的末端)并不会循环时,会发出此信号。
注意:这是一个私有信号。它可以用于信号连接,但不能由用户发出。
[私有信号]
void QTimeLine::frameChanged(int frame)
当QTimeLine处于运行中状态时,它会以常规间隔发出此信号,但只有当前帧发生变化时才会如此。frame是当前帧号。
注意:这是一个私有信号。它可以用于信号连接,但不能由用户发出。
另请参阅:QTimeLine::setFrameRange() 和 QTimeLine::updateInterval。
int QTimeLine::frameForTime(int msec) const
返回对应于时间msec的帧。此值使用线性插值根据valueForTime返回的值计算得出。
另请参阅:valueForTime 和 setFrameRange。
[槽函数]
void QTimeLine::resume()
从当前时间恢复时间线。在QTimeLine中,将再次进入运行状态,并进入事件循环后,将按常规间隔更新其当前时间、帧和值。
与start相反,此函数在恢复之前不会重新启动时间线。
另请参阅:start、updateInterval、frameChanged 和 valueChanged。
void QTimeLine::setEndFrame(int frame)
设置结束帧,即时间线末端的帧(即当前值为1的帧),为frame。
另请参阅:endFrame、startFrame 和 setFrameRange。
void QTimeLine::setFrameRange(int startFrame, int endFrame)
将时间线的帧计数器设置为从startFrame开始,并在endFrame结束。对于每个时间值,QTimeLine将使用valueForTime返回的值通过插值找到对应的帧,当调用currentFrame() 或 frameForTime时。
当在运行状态时,如果帧发生变化,QTimeLine还会发出frameChanged()信号。
另请参阅:startFrame、endFrame、start 和 currentFrame。
[槽函数]
void QTimeLine::setPaused(bool paused)
如果 paused 为 true,时间线将被暂停,导致 QTimeLine 进入暂停状态。只有在调用 start() 或 setPaused(false) 之后,才会发出更新信号。如果 paused 为 false,时间线将继续运行,并从上次停止的地方继续。
void QTimeLine::setStartFrame(int frame)
设置起始帧,即对应于时间线开始(即,当前值为 0 的帧)的帧,为 frame。
另请参阅startFrame(),endFrame() 及 setFrameRange()。
[slot]
void QTimeLine::start()
启动时间线。 QTimeLine 将进入运行状态,一旦进入事件循环,它将按固定时间间隔更新当前时间、帧和值。默认间隔为 40 毫秒(即每秒 25 次)。您可以通过调用 setUpdateInterval() 来更改更新间隔。
时间线将从位置 0 开始,或向后移动时的末尾。如果您想在不重新启动的情况下恢复停止的时间线,则可以调用 resume()。
另请参阅resume(),updateInterval(),frameChanged() 及 valueChanged()。
int QTimeLine::startFrame() const
返回起始帧,即对应于时间线开始(即,当前值为 0 的帧)的帧。
另请参阅setStartFrame() 和 setFrameRange()。
QTimeLine::State QTimeLine::state() const
返回时间线的状态。
另请参阅start(),setPaused() 以及 stop()。
[private signal]
void QTimeLine::stateChanged(QTimeLine::State newState)
每次 QTimeLine 的状态发生变化时都会发出此信号。新状态是 newState。
注意:这是一个私有信号。它可以用于信号连接,但不能由用户发出。
[slot]
void QTimeLine::stop()
停止时间线,导致 QTimeLine 进入 NotRunning 状态。
另请参阅start()。
[override virtual protected]
void QTimeLine::timerEvent(QTimerEvent *event)
重写: QObject::timerEvent(QTimerEvent *event)。
[slot]
void QTimeLine::toggleDirection()
切换时间线的方向。如果方向是向前,它将变为向后,反之亦然。
现有的 direction 绑定将移除。
另请参阅setDirection。
[私有信号]
void QTimeLine::valueChanged(qreal value)
QTimeLine 在 运行 状态下以固定间隔发出此信号,但如果当前值发生变化,则只发出此信号。 value 是当前值。 value 是介于 0.0 和 1.0 之间的数字
注意:这是一个私有信号。它可以用于信号连接,但不能由用户发出。
另请参阅 QTimeLine::setDuration(), QTimeLine::valueForTime() 和 QTimeLine::updateInterval。
[虚函数]
qreal QTimeLine::valueForTime(int msec) const
返回时间 msec 的时间线值。返回的值(取决于曲线形状)始终在 0 到 1 之间。如果 msec 为 0,则默认实现始终返回 0。
重新实现此函数以为您的时间线提供自定义曲线形状。
另请参阅 easingCurve 和 frameForTime。
© 2024 Qt 公司有限公司。此处包含的文档贡献的版权归其各自的所有者。此处提供的文档根据免费软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款进行许可。Qt 及相关标志是芬兰的 Qt 公司及其在全世界其他国家的 商标。所有其他商标均为其各自所有者的财产。