最近找了下家,提了離職,4月份走,人還待著老地方,整天無所事事
研究下自己感興趣的東西吧。比方說,動畫?
Qt 是在 4。6 版本引入
AbstractAnimation
這個類的,最早是希望透過
The Animation Framework
和
The State Machine Framework
來實現
QWidget
和
QGraphicsItem
的動畫效果
如今 9 年過去,Qt 從
Nokia
賣到了
Digia
公司,估計當初實現這兩套框架的開發者也已經離職了吧,反正很久沒更新了,官方的重點在
Qt Quick、QML、3D、Automotive
上面
然而,無論是
Qt 3D Studio
還是
Qt Quick Designer
,用的人都不多
就連剛一出來時很驚豔的
Graphical Effects
後面也沒出 C++ API 或者 demo 了
那麼就讓 The Qt Company 繼續在 安卓、物聯網、車聯網等々嵌入式海洋裡探索他的盈利點吧 ……
言歸正傳,我們來看早期的動畫
是這樣的
或者這樣的
都用的
QPropertyAnimation
一個作用於 QWidget
一個作用於 QGraphicsItem
然後在
Graphics View Framework
框架中
可以選擇重寫
void QGraphicsItem::advance(int phase)
來實現
比如經典的這個小老鼠動畫
後來 qml 出現,可以做出這樣的動畫
NumberAnimation PauseAnimation 實現字母 G 和 S 的動畫
ParticleSystem
ImageParticle 實現白色粒子效果動畫
SpringAnimation 實現方塊出現和消失時的彈簧動畫
Flipable
專門實現卡牌的翻轉動畫
qml 還提供了
SpriteSequence
和
AnimatedSprite
來實現動畫
兩者有什麼區別呢,簡單說就同樣是序列幀,前者能來回跳幀,後者只能暫停與播放
我們都知道,動畫就是序列幀的快速播放。
所以,更早期一些,在這些動畫類都沒定義前
常常用最基本的定時器 QBasicTimer 去實現動畫
每隔一段時間(下圖是60ms一次)就去重繪介面
還有用 QMovie 直接播放 gif
以上主要歸納了常見 Qt 實現 2D 動畫的方式
接下來應該是 show 程式碼的時刻了,但感覺篇幅太長了,而且都是 Qt 自帶的 demo
∴ 略。
BTW,這篇略水,下一篇重點講講 Qt 在 3D 中的動畫吧
To be continued。。。。