zl程序教程

您现在的位置是:首页 >  工具

当前栏目

Qt之QTimeLine

Qt
2023-09-11 14:19:13 时间

可以通过将持续时间毫秒传递给 QTimeLine 的构造函数来构建 timelinetimeline 的持续时间描述动画将运行多长时间。然后通过调用 setFrameRange() 设置合适的帧范围。最后将 frameChanged() 信号连接到想要动画的部件中的合适的槽函数例如QProgressBar 中的 setValue()。

调用 start()QTimeLine 将进入运行状态并开始定期固定的时间间隔发出 frameChanged() 信号部件的连接属性的值以稳定的速度从帧范围的下限到上限增长。可以通过调用 setUpdateInterval() 指定更新间隔。当完成后QTimeLine 进入 NotRunning 状态并发出 finished() 信号。

示例

这里写图片描述


// 构造帧范围为 0 - 100持续时间为 1000 毫秒1 秒的 timeline QTimeLine *timeLine = new QTimeLine(1000, this); timeLine- setFrameRange(0, 100); connect(timeLine, SIGNAL(frameChanged(int)), progressBar, SLOT(setValue(int))); // 输出当前帧数 connect(timeLine, QTimeLine::frameChanged, [=](int value) { qDebug() value; // 启动进度条动画 QPushButton *startButton = new QPushButton(this); startButton- setText(QString::fromLocal8Bit("开始")); connect(startButton, SIGNAL(clicked()), timeLine, SLOT(start()));

输出如下


默认情况下timeline 运行一次从开始到结束如果要从头开始重新启动必须再次调用 start()。要使 timeline 循环可以调用 setLoopCount()传递 timeline 在完成之前应运行的次数0 表示无限循环。也可以通过调用 setDirection() 来更改方向使 timeline 向后运行。还可以通过调用 setPaused() 在运行时暂停和取消暂停 timeline。对于交互式控制提供 setCurrentTime() 函数直接设置 timeline 的时间位置。虽然在 NotRunning 状态下最有用例如连接到 QSlider 中的 valueChanged() 信号但是该函数可以在任何时候被调用。


timeline 未运行。这是 QTimeLine 的初始状态并且状态在 QTimeLine 完成时重新进入。当前时间帧和值保持不变直到调用 setCurrentTime()或者通过调用 start() 启动 timeline 。
timeline 正在运行。当控制位于事件循环中QTimeLine 将定期更新其当前时间在适当时发出 valueChanged() 和 frameChanged() 信号。

一开始 QTimeLine 处于 NotRunning 状态在调用 start() 之后进入 Running 状态运行过程中可以进行暂停或者停止。

需要注意暂停和停止的概念


stop()停止 timelineQTimeLine 将进入 NotRunning 状态。 setPaused(true)暂停 timelineQTimeLine 将进入 Paused 状态。

在暂停或停止以后可以通过调用 resume()、setPaused(false)、start() 再次运行再来看看他们的区别


resume()从 timeline 的当前时间恢复QTimeLine 将重新进入 Running 状态一旦进入事件循环它将更新其当前时间、帧和值。与 start() 相反在恢复之前该函数不会重新启动 timeline。 setPaused(false)和 resume() 相同。

start()启动 timelineQTimeLine 将进入运行状态一旦它进入事件循环将在定期间隔时更新其当前时间、帧和值。默认间隔为 40 毫秒即每秒 25 次。可以通过调用 setUpdateInterval() 来更改更新间隔。

timeline 将从位置 0 处开始或者如果是相反方向则从结束位置开始。如果需要在不重新启动的情况下恢复已停止的时间轴可以调用 resume()。


timeline 的状态可以根据 state() 函数来获取当状态改变时会发射 stateChanged() 信号。


默认情况下此属性为 Forward时间从 0 到 timeline 的 duration持续时间。可以使用 setDirection() 来进行改变。


框架接口对标准窗口部件很有用但 QTimeLine 可用于控制任何类型的动画。QTimeLine 的核心在于 valueForTime() 函数该函数在给定时间内生成 0 和 1 之间的值。此值通常用于描述动画的步骤其中 0 是动画的第一步1 是最后一步。运行时QTimeLine 通过调用 valueForTime() 生成 0 和 1 之间的值并发出 valueChanged() 信号。默认情况下valueForTime() 应用插值算法生成这些值可以通过调用 setCurveShape() 从一组预定义的时间轴算法中进行选择。


该枚举描述了 QTimeLine 的值曲线的默认形状。默认的形状是 EaseInOutCurve曲线定义了值和 timeline 之间的关系。


注意默认情况下QTimeLine 使用 EaseInOut 曲线形状它提供一个慢慢增长然后稳定增长最终慢慢增长的值。对于自定义时间轴可以重新实现 valueForTime()在这种情况下QTimeLine 的 curveShape 属性被忽略。


QToolBox可以在一个tab列上显示另外一个,并且当前的item显示在当前的tab下面。每个tab都在tab列中有一个索引位置。tab的item是一个QWidget 。
QDateEdit和QTimeEdit均继承自QDateTimeEdit,许多特性和功能都有QDateTimeEdit提供。这些都是相关属性:
滑块是一个用于控制有界值的典型部件。它允许用户沿水平或垂直方向移动滑块,并将滑块所在的位置转换成一个合法范围内的值。
每个网络接口可以包含零个或多个IP地址,进而可以关联到一个子网掩码和/或一个广播地址(取决于操作系统的支持)。 这个类代表一个这样的组。
在Qt编程过程中,通常会有多个部件嵌套,而大多数部件都有父子依赖关系,但是有些情况下不能直接引用子部件,这时我们可以通过父部件来findChild -“查找孩子”。
现代操作系统通常在桌面上提供一个特殊的区域,称为系统托盘或通知区域,长时间运行的应用程序可以显示图标和短消息。
QRadioButton是一个可以切换选中(checked)或未选中(unchecked)状态的选项按钮。单选框通常呈现给用户一个“多选一”的选择。也就是说,在一组单选框中,一次只能选中一个单选框。
QCheckBox(复选框)和QRadioButton(单选框)都是选项按钮。这是因为它们都可以在开(选中)或者关(未选中)之间切换。区别是对用户选择的限制:单选框定义了“多选一”的选择,而复选框提供的是“多选多”的选择。 尽管在技术上可以通过复选框来实现单选框的行为,反之亦