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的曲线形状属性会被忽略。

                
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值