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时间轴处理(动画显示)。的主要内容,如果未能解决你的问题,请参考以下文章