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() // 接收方向改變信號