網上找了下QTimeLIne類的介紹,要么就是代碼一貼自己看去,要么就是說不到重點,正巧自己項目遇到這個類,在這里寫一下,給需要的同學看下。
因為我最近需要有動畫方面配合時間間隔觸發QGraphicsView框架的需求,意外找到了一個Qt中很實用的時間類QTImeLine,現在讓我們一起來學習一下它。
QTimeLine擁有一個時間軸來控制時間動畫和事件,其中在構造函數傳入的時候你需要指定一個毫秒級的參數來指定他的總運行時間比如new QTImeLine(1000),表示它運行的總時間為1秒。
第二步你要做的就是對QTImeLine的時間軸設置動畫幀數,相信了解動畫的人對幀數應該不陌生,不了解的人你可以跟我一樣把它想象成一個動畫表示的時 候有多少張靜態畫面組成,所以對QTimeLine::setFrameRange(0, 100)。表明該動畫一共有100張靜態畫面來組成,同時請注意,構造函數傳入的時候有一個時間參數,同學們千萬別以為frame和time有着必然的聯 系,其實時間再長或者時間再短,我的整個100幀都可以走完,只是走完時,會受時間影響的控制來影響我的幀數步長。比如你的時間設置為0ms,但幀數是 100,所以點了start之后一下子就到了100幀(Qt中默認規定40ms一幀,也就是一秒可以最多走25幀,但是如果你設置的是0ms,Qt會默認 按照40ms一幀的速度來走),同樣如果你設置了80ms,按照Qt的習慣,其實就是給你兩次走幀機會,聰明的同學應該猜到了,就是50幀和100幀。
第三步,你可以設置你的時間變換曲線,即setCurveShape函數來規定明確你的時間是先快后慢,還是先慢后快,或者線性,或者正余弦,比較常用的就是LinearCurve線性變換。
第四步,其實到這邊已經差不多了,在用connect連接好它的frameChanged(int)函數的時候,你設置好自己的響應時間槽,就可以觸發start來完成自己的動畫效果了。
PS:有的同學會問到setUpdateInterval函數是用來干嘛的,其實你可以簡單的理解為,時間軸的走的時候,會不斷的發出frameChanged信號,這個update就是給它把關多少時間發一次的,其實兩者並不沖突。
合理利用QTimeLIne類來控制自己的QGraphicsItem動畫,enjoy!