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类学习的更多相关文章

  1. 【转】Date类学习总结(Calendar Date 字符串 相互转换 格式化)

    原文网址:http://www.blogjava.net/jerry-zhaoj/archive/2008/10/08/233228.html Date类学习总结 1.计算某一月份的最大天数 Cale ...

  2. System类学习笔记

    最近在学习源码的过程中发现:很多深层次的代码都用到了一个类System类,所以决定对System类一探究竟 本文先对System类进行了剖析,然后对System类做了总结 一.首先对该类的中的所有字段 ...

  3. Date类学习总结(Calendar Date 字符串 相互转换 格式化)

    Date类学习总结 1.计算某一月份的最大天数 Calendar time=Calendar.getInstance();time.clear();time.set(Calendar.YEAR,yea ...

  4. Scala中的类学习

    Scala中的类学习 从java了解类的情况下,了解Scala的类并不难.Scala类中的字段自动带getter和setter方法,用@BeanProperty注解生成javaBean对象的getXX ...

  5. zt C++ list 类学习笔记

    C++ list 类学习笔记 分类: C++ 2011-09-29 00:12 7819人阅读 评论(0) 收藏 举报 listc++iteratorvectorcconstructor 双向循环链表 ...

  6. Properties工具类学习

    Properties类学习 1.定义 Properties,java.utils包下的一个工具类,主要用于读取Java的配置文件.各种语言都有自己所支持的配置文件,配置文件中很多变量是经常变动的. 这 ...

  7. RandomAccessFile类学习

    RandomAccessFile类学习 RandomAccessFile是io包的类,从Object直接继承而来,只可以对文件进行操作,可以对文件进行读取和写入. 当模式为r:当文件不存在时会报异常: ...

  8. Task类学习教程—组合任务ContinueWith

    Task类学习教程-组合任务.ContinueWith 一.简介 通过任务,可以指定在任务完成之后,应开始运行之后另一个特定任务.ContinueWith是Task根据其自身状况,决定后续应该作何操作 ...

  9. QPainter类学习

    详细描述: QPainter类提供了许多高度优化的函数去做大部分的GUI绘制工作.它可以画从简单的线到复杂的形状.通常情况下,QPainter的使用是在widget当中的painter事件使用.记得在 ...

随机推荐

  1. 开始编写正式的iOS 程序(iOS编程指导)

    App设计基础 在确定了你的App主要功能后,需要把它转化为代码.如果你是第一次开发属于自己的iOS App,需要花些时间熟悉基本概念.iOS内置了很多设计样式,多了解下能对你以后有帮助. 初稿 设计 ...

  2. Linux(Debian)上安装Redis教程

    -- 第一步下载文件到该目录 cd /usr/local/src wget http:.tar.gz 解压 tar xzf redis.tar.gz -- 第二步编译安装 make make all ...

  3. jquery mobile展开项collapsible

    代码演示 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta ...

  4. 打包静默安装参数(nsis,msi,InstallShield,InnoSetup)[转]

    有时我们在安装程序的时候,希望是静默安装的,不显示下一步下一步,这编访问来教大家如何来操作,现在常用的制作安装程序的软件有,  Microsoft Windows Installer  , Windo ...

  5. c#读取进程列表判断程序是否已经启动(转)

    方法一: using System.Diagnostics; Process[] vProcesses = Process.GetProcesses(); foreach (Process vProc ...

  6. grails框架中读取txt文件内容将内容转换为json格式,出现异常Exception in thread "main" org.json.JSONException: A JSONObject text must begin with '{' at character 1 of [...]

    Exception in thread "main" org.json.JSONException: A JSONObject text must begin with '{' a ...

  7. asp.net webform 局部发布更新

    一:关于webform编译 编译时会将每个aspx文件单独生成dll文件于bin目录下.也会将引用的dll存放于bin目录 二:对界面或者引用的dll(如BLL层,DAL层等)做了修改更新后在服务器只 ...

  8. laravel框架——表单验证

    创建路由 Route::get('test','VerController@index'); Route::post('tosubmit','VerController@tosubmit'); 在控制 ...

  9. 机器学习(1)之梯度下降(gradient descent)

    机器学习(1)之梯度下降(gradient descent) 题记:最近零碎的时间都在学习Andrew Ng的machine learning,因此就有了这些笔记. 梯度下降是线性回归的一种(Line ...

  10. Extjs4.1.x使用Application动态按需加载MVC各模块

    我们知道Extjs4之后提出了MVC模块开发,将以前肥厚的js文件拆分成小的js模块[model\view\controller\store\form\data等],通过controller拼接黏合, ...