QT:QTimeLine时间轴处理(动画显示)。

Posted alex-space

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT:QTimeLine时间轴处理(动画显示)。相关的知识,希望对你有一定的参考价值。

 

QT版本:win32 QT Creator5.9.9

QTimeLine提供了控制动画播放的时间线。

动画是由一帧帧的静态图片组成的,只要把动画的帧与QTimeLine的时间线对应上,就能通过指定时间的和帧数范围的时间线,并且提供时间线上的前进、倒退、暂停、重新开始、帧数计数、自定义间隔计数等多种方法。

由于在需求上需要一个计时来框定某些GUI部件的显示,故使用到了QTimeLine类。

在该类上能够获得的特性有:

①时间线总时间。

②线内帧数的范围(还可以设置起始的帧数位置,不一定非要从0帧开始)。

③时间线运动的方向。

④对时间线进行分隔,设定时间片间隔时间,通过相应的值改变信号来获得间隔的到达。

⑤时间线循环次数。

⑥时间线暂停。

⑦时间线完成发射信号,通过自定义槽,能直接知道时间线的停止时间。

用法:

一、定义时间线类:

1 timeLine = new QTimeLine(msecDuration, this);

先自己定义一个QTimeLine类指针,然后new一个,构造函数中参数一为时间线总时间,单位为毫秒。

二、设置帧数范围:

1 timeLine->setFrameRange(mininumFrame, maxinumFrame);

在该时间线内,会自动根据帧数的范围分布到整个时间线,当每一帧时间到达时,会发送信号void frameChanged(int frame),通过该信号可以获知每一帧的改变。

三、设置时间线运动方向:

 // 方式一
timeLine->setDirection(QTimeLine::Backward); // 指定方向 /* enum Direction { Forward, // 向前,默认 Backward // 向后 }; */
//方式二 timeLine->toggleDirection(); // 根据当前方向,变更

四、设置时间间隔:

timeLine->setUpdateInterval(msecInterview); // 单位毫秒

根据时间间隔发设值改变信号void valueChanged(qreal value),其中value值为当前时间点占总时间的比例(0~1)。当我们要在时间先内做快速的显示,可以把间隔调小,根据信号连接槽函数即可在槽函数内做相应处理。

五、设置循环次数:

void setLoopCount(int count)

六、暂停与运行:

开始:start()

暂停:setPaused(true)->setPaused(false)或resume()唤醒继续

   stop()->只能由resume()唤醒继续

setPaused(false)进入QTimeLine::Paused态

stop()进入QTimeLine::NotRunning态

状态 状态值 描述
QTimeLine::NotRunning 0 未运行
QTimeLine::Paused 1 暂停
QTimeLine::Running 2 运行

 

 

 

 

 

七、信号:

void finished()  // 时间线运行结束时发射
void frameChanged(int frame) // 根据设置的帧范围进行发射
void stateChanged(QTimeLine::State newState) // 状态发生改变时发射
void valueChanged(qreal value) // 根据设置的时间间隔进行发射

八、槽:

void resume() // 接收resume信号
void setCurrentTime(int msec) // 接收当前时间
void setPaused(bool paused) // 接收暂停标志
void start()  // 接收开始信号
void stop() // 接收停止信号
void toggleDirection() // 接收方向改变信号

 

以上是关于QT:QTimeLine时间轴处理(动画显示)。的主要内容,如果未能解决你的问题,请参考以下文章

Qt 之 QTimeLine

Qt 之 QTimeLine

使用 QTimeline 制作动画

QTimeLine 控制动画(一步一步的往前变化,并在每次变化时都会发出一个frameChanged信号)

围绕特定轴动画qt3d旋转

如何在嵌入Qt环境的matplotlib中更快地绘制大量信号?