概述

QTimeLine类提供用于控制动画的时间表,通常用于定期调用插槽来为GUI控件创建动画。简单来说,就是可以通过 QTimeLine 来快速的实现动画效果,其原理就是在指定的时间内发出固定帧率的信号,通过连接该信号去改变目标控件的值,由于时间断帧率高,所以整体看起来就是连续的动画效果。
以上说得可能有些抽象,下面结合实例和用法步骤来看看。

用法

将使用步骤总结为以下几点:

  • 1.创建 QTimeLine对象的时候传入时间值,单位是毫秒,该时间就是动画运行的时间;
  • 2.设置帧率范围,通过setFrameRange()进行设置,该值表示在规定的时间内将要执行多少帧;
  • 3.连接frameChanged()信号,并在槽中对需要实现动画的控件进行赋值,如QProgressBar的setValue().
  • 4.调用 start()开始执行时间轴动作。

当 QTimeLine调用 start()后将进入运行状态,并会发出frameChanged()信号,而连接该信号的槽中将会不断的对目标控件进行相应的动作赋值,从而实现动画效果。可以通过调用setUpdateInterval()来指定更新间隔。完成后,QTimeLine进入NotRunning状态,并发出finished().

简单示例

progressBar = new QProgressBar(this);
progressBar->setRange(0, 100);
progressBar->move(100,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, SIGNAL(frameChanged(int)), progressBar, SLOT(setValue(int)));// Clicking the push button will start the progress bar animation
QPushButton * pushButton = new QPushButton(tr("Start animation"), this);
connect(pushButton, SIGNAL(clicked()), timeLine, SLOT(start()));

当点击按钮后,progressBar 将会在1000ms 内进行100次setValue(),这里的timeLine->setFrameRange(0, 100);表示将执行100帧,也就是说会发出100次frameChanged信号,通过连接该信号去改变progressBar的值。

默认情况下,时间轴从开始到结束运行一次,此时必须再次调用start()才能从头开始重新启动。要进行时间线循环,您可以调用setLoopCount(),并在完成之前传递时间轴应该运行的次数。通过调用setDirection(),方向也可以改变,可以让时间线向后运行。也可以通过调用setPaused()来暂停和取消暂停时间轴的运行。对于交互式控件,提供了setCurrentTime()函数,该函数直接设置时间线的时间位置。

再来看一个示例:

m_pWidget = new QWidget(this);
m_pWidget->resize(50,50);
m_pWidget->setStyleSheet("background-color:red;");
m_pWidget->move(0,100);
m_pWidget->show();QTimeLine *timeLine = new QTimeLine(1000, this);
timeLine->setFrameRange(0, 200);
connect(timeLine,&QTimeLine::frameChanged,this,[=](int frame){m_pWidget->move(1*frame,100);
});
connect(timeLine,&QTimeLine::finished,this,[=](){
if(timeLine->direction() == 0){timeLine->setDirection(QTimeLine::Backward);
}
else{timeLine->setDirection(QTimeLine::Forward);
}timeLine->start();
});QPushButton * pushButton = new QPushButton(tr("Start animation"), this);
connect(pushButton, SIGNAL(clicked()), timeLine, SLOT(start()));

效果:

这里通过连接信号finished,当一次动画结束后再调用setDirection来改变动画方向。

更多用法,查看 Qt 帮助文档 http://doc.qt.io/qt-5/qtimeline.html

Qt时间轴QTimeLine的基本用法相关推荐

  1. qt之QCustomPlot动态时间轴更新曲线

    一.前言 使用qcustomplot进阶用法, 横坐标采用时间显示,纵坐标为数值当前值,主要实现的是横坐标点和时间对应,但不全部显示时间,只显示设定数量时间点,例如:曲线x长度10000,设置时间点7 ...

  2. 基于QT封装的音视频播放时间轴控件

    采用QT graphicsview视图框架,可以实现时间轴缩放,指针拖拉,滚动条移动,可以新增指针事件等,提供时间片添加接口. 思路:左侧车牌信息和通道列表是qwidget正常的窗口,右侧的时间轴,通 ...

  3. Qt 实现的时间轴 Timeline 用于视频非线形编辑工具

    基于Qt 图形/视图实现的时间轴编辑器,支持缩放,时间/帧 现实方式,clip的放大缩小. 配合视频播放窗口效果应该不错,放几张预览图给感兴趣的人参考下,另外,提供源码下载,不收费. 1)使用鼠标进行 ...

  4. 【echarts高级用法】在地理坐标系中镶嵌柱状图,在加上时间轴让图动起来

    为了冲个官方认证新星博主,发点库存 在地理坐标系中镶嵌柱状图,在加上时间轴让图动起来 将现成的内容加以组合,一直是白嫖的最高级形式.对此,PPAP大叔直呼内行. echarts,作为一款基于JavaS ...

  5. QT qcustomplot 实战经验分享之二:动态时间轴

    准备工作 建立实时动态时间刷新曲线 定时器 时间轴设置 数据更新 定时器 建立定时器 //在头文件定义 #include "QTimer" QTimer * MainTimer; ...

  6. flash时间轴控制命令

    在Flash动画脚本中,控制影片播放的命令包括 play.stop.gotoAndPlay.gotoAndStop等,下面我们将分别对这些命令进行介绍.1. play(播放)stop(停止)命令通过为 ...

  7. 时间轴ui设计_我应该在UI设计上花更多时间吗?

    时间轴ui设计 Let's start with an example of communication skills: they are important for any profession, ...

  8. 骆驼祥子大事件时间轴_骆驼中的事件处理

    骆驼祥子大事件时间轴 在上一篇有关骆驼-小水车的文章中,我介绍了骆驼-小水车的组件,并使用骆驼路线中的规则实现了一些简单的面向任务的过程. 今天,我将展示如何通过添加事件处理来扩展此示例. 那么如何描 ...

  9. Echarts(三):含有时间轴的可视化案例1

    这是一篇小白的实现时间轴的可视化的笔记. Timeline说明 timeline 需要操作多个option. "我们把传入 setOption 第一个参数,称为 ECOption,称传统的 ...

最新文章

  1. WebClient UI和Tomcat的启动器
  2. Spring Boot并不重复“造轮子”
  3. Leetcode_No.66 Plus One
  4. springmvc+mybatis,在mybatis逆向工程的基础上使用模板自动生成controller层代码
  5. Springboot视图解析与模板引擎
  6. 如何解决Backup Exec Remote Agent推送安装失败的问题
  7. 虎头少保,天下第一手孙禄堂【转】
  8. Photoshop CS6详细安装图文教程
  9. Maix_Bit官方烧录软件和IDE的使用
  10. 《电路分析基础》第11章 耦合电感电路 读书笔记
  11. 为什么博途V17及以下的HMI面板不能与1500固件版本2.9或1200版本4.5 的CPU建立连接?
  12. 图像分类经典卷积神经网络—SENet论文翻译(中英文对照版)—Squeeze-and-Excitation Networks(挤压和激励网络)
  13. 作为一枚程序员,每天必用的软件有哪些?
  14. 批量修改文件内容(Python版)
  15. 聚宝加油卡,2022年独一无二的翻身机会
  16. php动态创建菜单,php创建无限级树型菜单
  17. 哈佛体系结构 哈佛体系结构
  18. van-popup() 点击空白处关闭弹窗
  19. 2020年12月特许金融分析师CFA考试难度分析!
  20. 打击侵犯个人信息犯罪,推动信息保护立法

热门文章

  1. 聊聊前端日志库在 SaaS 产品中的应用与设计
  2. 流量难、获客难、增长难?增长黑客思维“解救”B端业务
  3. 网易云信三周年:我们只做第一
  4. PHP不能连接MS SQL Server的解决方法
  5. 大对象简介+大对象的4种类型+lob类型的优点+lob的组成
  6. 中国联通SDN/NFV的思考与实践
  7. 看微信了解MySQL及相关IT技术
  8. 客户区坐标与屏幕坐标之间的转换问题
  9. js中,(function(){})()的用法解析
  10. looper message handler之间的关系