深入浅出理解QTimeLine类

网上找了下QTimeLIne类的介绍,要么就是代码一贴自己看去,要么就是说不到重点,正巧自己项目遇到这个类,在这里写一下,给需要的同学看下。

因为我最近需要有动画方面配合时间间隔触发QGraphicsView框架的需求,意外找到了一个Qt中很实用的时间类QTImeLine,现在让我们一起来学习一下它。

QTimeLine拥有一个时间轴来控制时间动画和事件,其中在构造函数传入的时候你需要指定一个毫秒级的参数来指定他的总运行时间比如new QTImeLine(1000),表示它运行的总时间为1秒。

第二步你要做的就是对QTImeLine的时间轴设置动画帧数,相信了解动画的人对帧数应该不陌生,不了解的人你可以跟我一样把它想象成一个动画表示的时
候有多少张静态画面组成,所以对QTimeLine::setFrameRange(0,
100)。表明该动画一共有100张静态画面来组成,同时请注意,构造函数传入的时候有一个时间参数,同学们千万别以为frame和time有着必然的联
系,其实时间再长或者时间再短,我的整个100帧都可以走完,只是走完时,会受时间影响的控制来影响我的帧数步长。比如你的时间设置为0ms,但帧数是
100,所以点了start之后一下子就到了100帧(Qt中默认规定40ms一帧,也就是一秒可以最多走25帧,但是如果你设置的是0ms,Qt会默认
按照40ms一帧的速度来走),同样如果你设置了80ms,按照Qt的习惯,其实就是给你两次走帧机会,聪明的同学应该猜到了,就是50帧和100帧。

第三步,你可以设置你的时间变换曲线,即setCurveShape函数来规定明确你的时间是先快后慢,还是先慢后快,或者线性,或者正余弦,比较常用的就是LinearCurve线性变换。

第四步,其实到这边已经差不多了,在用connect连接好它的frameChanged(int)函数的时候,你设置好自己的响应时间槽,就可以触发start来完成自己的动画效果了。

PS:有的同学会问到setUpdateInterval函数是用来干嘛的,其实你可以简单的理解为,时间轴的走的时候,会不断的发出frameChanged信号,这个update就是给它把关多少时间发一次的,其实两者并不冲突。

合理利用QTimeLIne类来控制自己的QGraphicsItem动画,enjoy!

时间: 2024-10-14 16:07:20

深入浅出理解QTimeLine类的相关文章

深入浅出理解c++虚函数

深入浅出理解c++虚函数 记得几个月前看过C++虚函数的问题,当时其实就看懂了,最近笔试中遇到了虚函数竟然不太确定,所以还是理解的不深刻,所以想通过这篇文章来巩固下. 装逼一刻: 最近,本人思想发生了巨大的转变,在大学的时候由于读书少,经常写一些玩具程序而沾沾自喜,总之一句话,那时写程序纯粹是为了写程序而写程序.然而,作为大部分的学习者来说,往往忽略了学习开发语言的本质.即C++语言的设计思想也是以服务生产生活为主的,总结成一句话就是C++是实用的.我们在学习这门语言的一些特性的时候,上来就开始

理解ThreadLocal类

1 ThreadLocal是什么 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地编写出优美的多线程程序. ThreadLocal,顾名思义,它不是一个线程,而是线程的一个本地化对象.当工作于多线程中的对象使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程分配一个独立的变量副本.所以每一个线程都可以独立地改变自己的副本,而不会影响其他线程所对应

0524.深入浅出理解iOS常用的正则表达式—基础篇[Foundation]

参考资料:cocoachina的zys475481075的文章 几个单词 Regular  ['regj?l?] adj. 定期的:有规律的 Expression [?k'spre?(?)n; ek-] n. 表现,表示 Regular expression 正则表达式 什么是正则表达式? 用一个描述字符串去验证另一个字符串是否符合描述字符串的特征.(不严谨,可以这么理解) 思考:比如表达式"12+",描述的意思是一个1和任意个2组成的字符串,那么'12'.'122'.'122'-.都

[深入理解Android卷一全文-第五章]深入理解常见类

由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在OSC博客中全文转发这两本书的全部内容. 第5章 深入理解常见类 本章主要内容 ·  分析RefBase.sp,wp和LightRefBase类. ·  分析Native的Thread类和常用同步类. ·  分析Java层的Handler.Looper,以及HandlerThread类. 本章涉及的源代码文件名称及位置 下面是我们本章分析的源码文件名和

Python——五分钟理解元类(metaclasses)

“元类的魔幻变化比 99% 的用户所担心的更多,当你搞不懂是否真的需要用它的时候,就是不需要.” —Tim Peters 本文源于在 PyCon UK 2008 上的一个快速演讲. 元类被称为 Python 中的“深奥的巫术”.尽管你需要用到它的地方极少(除非你基于zope 编程),可事实上它的基础理论其实令人惊讶地易懂. 一切皆对象 一切皆对象 一切都有类型 “class”和“type”之间本质上并无不同 类也是对象 它们的类型是 type 以前,术语 type 用于内置类型,而术语 clas

继承FileInputFormat类来理解 FileInputFormat类

import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.fs.BlockLocation; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apa

Java基础12:深入理解Class类和Object类

Java基础12:深入理解Class类和Object类 Java中Class类及用法 Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识,即所谓的RTTI. 这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class类.Class类封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建. 说白了就是: Class类也是类的一种,只是名字和class关键字高度相似.Java是大小写敏感的语言.

别翻了,这篇文章绝对让你深刻理解java类的加载以及ClassLoader源码分析【JVM篇二】

目录 1.什么是类的加载(类初始化) 2.类的生命周期 3.接口的加载过程 4.解开开篇的面试题 5.理解首次主动使用 6.类加载器 7.关于命名空间 8.JVM类加载机制 9.双亲委派模型 10.ClassLoader源码分析 11.自定义类加载器 12.加载类的三种方式 13.总结 14.特别注意 @ 前言 你是否真的理解java的类加载机制?点进文章的盆友不如先来做一道非常常见的面试题,如果你能做出来,可能你早已掌握并理解了java的类加载机制,若结果出乎你的意料,那就很有必要来了解了解j

面向对象的理解 和 类

面向对象的理解 和 类万物皆对象 类是抽象 的 比如 人类 看得到摸得到吗 命名规范:(查) 类定义: { 属性 方法 } public class Person{ String name; String gender; int age; public void eat(){//无参数 无返回值 Systm.out.println("我在吃饭!"); } }//在同一个目录下不用导入 public Test{ public static void main(String[] args)