QTimeLine 类

QTimeLine 类提供用于控制动画的时间线。 更多...

头文件 #include <QTimeLine>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core
继承 QObject

公共类型

枚举Direction { Forward, Backward }
枚举State { NotRunning, Paused, Running }

属性

公共函数

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()
intcurrentFrame() const
intcurrentTime() const
qrealcurrentValue() const
QTimeLine::Directiondirection() const
intduration() const
QEasingCurveeasingCurve() const
intendFrame() const
intframeForTime(int msec) const
intloopCount() const
voidsetDirection(QTimeLine::Direction direction)
voidsetDuration(int duration)
voidsetEasingCurve(const QEasingCurve &curve)
voidsetEndFrame(int frame)
voidsetFrameRange(int startFrame, int endFrame)
voidsetLoopCount(int count)
voidsetStartFrame(int frame)
voidsetUpdateInterval(int interval)
intstartFrame() const
QTimeLine::Statestate() const
intupdateInterval() const
virtual qrealvalueForTime(int msec) const

公共槽

void简历()
voidsetCurrentTime(int msec)
voidsetPaused(bool paused)
void开始()
void停止()
void切换方向()

信号

void完成()
voidframeChanged(int frame)
voidstateChanged(QTimeLine::State newState)
voidvalueChanged(qreal value)

重实现的保护函数

virtual voidtimerEvent(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 属性将被忽略。

另请参阅QProgressBarQProgressDialog

成员类型文档

枚举 QTimeLine::Direction

此枚举描述了时间线在 运行 状态下的方向。

常量描述
QTimeLine::Forward0时间线的当前时间随着时间的增长而增长(即从 0 增长到截止时间/持续时间)。
QTimeLine::Backward1时间线的当前时间随着时间的减少而减少(即从截止时间/持续时间减小到 0)。

另请参阅setDirection

枚举 QTimeLine::State

此枚举描述了时间线的状态。

常量描述
QTimeLine::NotRunning0时间线未运行。这是 QTimeLine 的初始状态,并且当完成时 QTimeLine 重新进入此状态。当前时间、帧和值在调用 setCurrentTime() 或通过调用 start() 开始时间线之前保持不变。
QTimeLine::Paused1时间线已暂停(即,暂时挂起)。调用 setPaused(false) 将重新启动时间线活动。
QTimeLine::Running2时间线正在运行。当控制权在事件循环中时,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返回的值计算得出。

另请参阅:valueForTimesetFrameRange

[槽函数] void QTimeLine::resume()

从当前时间恢复时间线。在QTimeLine中,将再次进入运行状态,并进入事件循环后,将按常规间隔更新其当前时间、帧和值。

start相反,此函数在恢复之前不会重新启动时间线。

另请参阅:startupdateIntervalframeChangedvalueChanged

void QTimeLine::setEndFrame(int frame)

设置结束帧,即时间线末端的帧(即当前值为1的帧),为frame

另请参阅:endFramestartFramesetFrameRange

void QTimeLine::setFrameRange(int startFrame, int endFrame)

将时间线的帧计数器设置为从startFrame开始,并在endFrame结束。对于每个时间值,QTimeLine将使用valueForTime返回的值通过插值找到对应的帧,当调用currentFrame() 或 frameForTime时。

当在运行状态时,如果帧发生变化,QTimeLine还会发出frameChanged()信号。

另请参阅:startFrameendFramestartcurrentFrame

[槽函数] void QTimeLine::setPaused(bool paused)

如果 paused 为 true,时间线将被暂停,导致 QTimeLine 进入暂停状态。只有在调用 start() 或 setPaused(false) 之后,才会发出更新信号。如果 paused 为 false,时间线将继续运行,并从上次停止的地方继续。

另请参阅state() 和 start()。

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。

重新实现此函数以为您的时间线提供自定义曲线形状。

另请参阅 easingCurveframeForTime

© 2024 Qt 公司有限公司。此处包含的文档贡献的版权归其各自的所有者。此处提供的文档根据免费软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款进行许可。Qt 及相关标志是芬兰的 Qt 公司及其在全世界其他国家的 商标。所有其他商标均为其各自所有者的财产。