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. crud的意识

    CRUD说的就是增查改删C:Create 增加对应CREATE TBL ...: ADD TBL IN (...) VALUES (...)R:Retrieve查询SELECT * from TBLU ...

  2. 015_xml_函数

    015_xml_函数 --环境准备******************************************************************* USE test --f:/t ...

  3. Swift进阶

    概述 访问控制 Swift命名空间 Swift和ObjC互相调用 Swift和ObjC映射关系 Swift调用ObjC ObjC调用Swift 扩展—Swift调用C 反射 扩展—KVO 内存管理 循 ...

  4. Swift - 03 - 整数类型

    //: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...

  5. EF学习系列

    http://www.cnblogs.com/Wayou/archive/2012/09/20/EF_CodeFirst.html http://kb.cnblogs.com/zt/ef/#

  6. 使用HTML+CSS,jQuery编写的简易计算器

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  7. 页面d初始化加载

    1.$(document).ready(function () { alert("Hello Word!"); }); 或简写为 2.$(function(){ alert(&qu ...

  8. php 使用phpqrcode类生成带有logo的二维码 使logo不失真(透明)

    在开发中 发现phpqrcode类在加入logo时,如果 logo 是 png 图像带有透明区域时,二维码上都无法正常完美的显示出来 解决方法便是:修改phpqrcode文件中的 QRimage类下的 ...

  9. strtolower() strtoupper()等字符串大小写转换函数

    $str = "Mary Had A Little Lamb and She LOVED It So"; string strtolower ( string $str )— 将字 ...

  10. 深入理解javascript闭包(一)

    原文转自脚本之家(http://www.jb51.net/article/24101.htm) 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. ...