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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM