QTimerLine类学习
QTimeLine类提供了控制动画的时间轴。
类型:enum CurveShape{EaseInCurve,EaseOutCurve,EaseInOutCurve,LinearCurve,SineCurve,CosineCurve}闲散的曲线,线性曲线和sin,cos曲线。
enum Direction{Forward,Backward}方向前和后。
enum State{NotRunning,Paused,Running}运行,停止和暂停。
公共槽:void resume()接收恢复信号,void setCurrentTime(int msec)接收当前时间信号,void setPaused(bool paused)接收当前暂停信号,void start()接收开始信号,void stop()接收停止信号,void toggleDirection()接收触发方向信号。
信号:void finished()发送完成信号,void frameChanged(int frame)发送帧改变信号,void stateChanged(QTimeLine::State newState)发送状态改变信号,void valueChanged(qreal value)发送值改变信号
重载函数:virtual void timerEvent(QTimeEvent *event)
详细描述:调用一个定期的槽使得GUI控制动画化是非常普遍的。你可以根据它的持续时间,化成毫秒作为参数传递给QTimeLine的构造函数,该参数表明了这个动画运行的时间长度。然后使用setFrameRange()这个函数来设置适合这个范围的帧。最后发送frameChanged()信号给一个合适的widget槽来改变该widget的动画效果。当你开始调用start(),QTimeLine会进入运行状态,并且定期的有规律的发射frameChanged()信号,使得该信号连接到widget的属性值在你的帧范围内从低到高以一个稳定的速度增长。你也可以使用setUpdatInterval()函数明确指定更新的间隔。完成时,QTimeLine进入NoRunning状态,并且发射finished()信号。
Example:
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, SIGNAL(frameChanged(int)), progressBar, SLOT(setValue(int))); // Clicking the push button will start the progress bar animation
pushButton = new QPushButton(tr("Start animation"), this);
connect(pushButton, SIGNAL(clicked()), timeLine, SLOT(start()));
以上程序使用QTimeline 设置一个FrameRange,然后发送一个frameChanged信号给progressBar,设置该进程的值。并且用一个push
-Button的clicked()信号触发QTimeLine的start()槽。
你也可以在Graphics View 框架之中使用QTimeLine动画,QGraphicsItemAnimation类就利用timeline来对QGraphicsItems做动画。
一旦默认的timeline运行起来,从开始到结束,这个过程你必须重新调用start()才能够再次运行,为了能够使得timeline可以循环,你可以调
用setLoopCount()这个函数,传递timeline可以运行的次数。运行的方向也可以被改变,如果要让timeline回退运行,只要调用setDirect
-ion()这个函数即可。你还可以调用setPaused()这个函数在timeline运行的过程中暂停timeline,为了达到交互控制,使用setCurrent-
Time()函数能够被使用,可以直接设置timeline的位置。
在标准的widget中,帧接口是非常有用的,但是QTimeLine能够被用来控制任何类型的动画。这个功能的核心是valueForTime()这个函
数,该函数通过给定时间生成一个0-1的值,这个值通常用来描述动画的步数。0是该动画的第一部分而1是该动画的最后一个部分。运行起来
的时候,QTimeLine调用valueForTime()生成该值(0-1),并且发射一个valueChanged()信号,默认地,valueForTime运用一种插值
算法来生成该值。你也可以使用setCurveShape()函数来选择一些类的预定义timeline算法。
默认情况下,QTimeLine 使用EaseInOut曲线形状,提供了一种慢速的增长方式。在典型的timeline当中,你可以使用valueForTime()
这个时候QTimeLine的曲线形状属性会被忽略。
QTimerLine类学习的更多相关文章
- 【转】Date类学习总结(Calendar Date 字符串 相互转换 格式化)
原文网址:http://www.blogjava.net/jerry-zhaoj/archive/2008/10/08/233228.html Date类学习总结 1.计算某一月份的最大天数 Cale ...
- System类学习笔记
最近在学习源码的过程中发现:很多深层次的代码都用到了一个类System类,所以决定对System类一探究竟 本文先对System类进行了剖析,然后对System类做了总结 一.首先对该类的中的所有字段 ...
- Date类学习总结(Calendar Date 字符串 相互转换 格式化)
Date类学习总结 1.计算某一月份的最大天数 Calendar time=Calendar.getInstance();time.clear();time.set(Calendar.YEAR,yea ...
- Scala中的类学习
Scala中的类学习 从java了解类的情况下,了解Scala的类并不难.Scala类中的字段自动带getter和setter方法,用@BeanProperty注解生成javaBean对象的getXX ...
- zt C++ list 类学习笔记
C++ list 类学习笔记 分类: C++ 2011-09-29 00:12 7819人阅读 评论(0) 收藏 举报 listc++iteratorvectorcconstructor 双向循环链表 ...
- Properties工具类学习
Properties类学习 1.定义 Properties,java.utils包下的一个工具类,主要用于读取Java的配置文件.各种语言都有自己所支持的配置文件,配置文件中很多变量是经常变动的. 这 ...
- RandomAccessFile类学习
RandomAccessFile类学习 RandomAccessFile是io包的类,从Object直接继承而来,只可以对文件进行操作,可以对文件进行读取和写入. 当模式为r:当文件不存在时会报异常: ...
- Task类学习教程—组合任务ContinueWith
Task类学习教程-组合任务.ContinueWith 一.简介 通过任务,可以指定在任务完成之后,应开始运行之后另一个特定任务.ContinueWith是Task根据其自身状况,决定后续应该作何操作 ...
- QPainter类学习
详细描述: QPainter类提供了许多高度优化的函数去做大部分的GUI绘制工作.它可以画从简单的线到复杂的形状.通常情况下,QPainter的使用是在widget当中的painter事件使用.记得在 ...
随机推荐
- 安卓开发入门之activity
安卓开发主要用到的是java语言,对于一个activity,自己写的程序可以继承至Activity,该Activity先会运行一个叫 onCreat()的类,可以在其中申明一些初始化的函数等,这个函数 ...
- PHP获取函数返回值的引用
通过在函数前添加&可以获取函数返回值的引用,如:function &test(){return 10;}
- 基于jq插件开发及弹窗实例
基于jq的插件开发是什么鬼,$.fn是什么鬼,我在实际工作中也遇到过这个问题,下面就让我们一起来看一看这些都是什么鬼. 首先我们介绍$.fn. $.fn是指jquery的命名空间,加上fn上的方法及属 ...
- 16 3Sum Closest(输出距离target最近的三个数的和Medium)
题目意思:给一个数组,给一个target,找三个数的和,这个和要与target距离最近,输出这个和 思路:这个题比3sum要稍微简单一点,如果需要优化,也可以去重,不过因为结果唯一,我没有去重. mi ...
- 利用路由修改thinkphp框架开发的后台地址
一般我们写前台是home 后台是 admin那么我们的后台是 域名/admin 那我们要随时修改这个地址是非常麻烦的事情开始可能会想到,就是把模块名称改掉,或者分组(3.1版)这样的话不但要改配置,连 ...
- BAT清理垃圾
@echo off title ϵͳȥm del /f /s /q %systemdrive%\*.tmp del /f /s /q %systemdrive%\*._mp del /f /s /q ...
- OC & java 对比
Objective-C的语法对比(和Java的对比) Objective-C的语法对比(和Java的对比) 1.函数的对比 例子: helloworld方法 Java 语言: publi ...
- NOIP[2015] 运输计划
传送门 题目描述 Description 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球 ...
- Ant快速入门(三)-----定义生成文件
适应Ant的关键就是编写生成文件,生成文件定义了该项目的各个生成任务(以target来表示,每个target表示一个生成任务),并定义生成任务之间的依赖关系. Ant生成文件的默认名为build.xm ...
- Mifare 1卡的存储结构
存取控制指符合什么条件才能对卡片进行操作. S50和S70的块分为数据块和控制块,对数据块的操作有“读”.“写”.“加值”.“减值(含传输和存储)”四种,对控制块的操作只有“读”和“写”两种. S50 ...