最近找了下家,提了離職,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 繼續在 安卓、物聯網、車聯網等々嵌入式海洋裡探索他的盈利點吧 ……

言歸正傳,我們來看早期的動畫

是這樣的

Thinking in Qt ( Ⅹ )

或者這樣的

Thinking in Qt ( Ⅹ )

都用的

QPropertyAnimation

一個作用於 QWidget

一個作用於 QGraphicsItem

然後在

Graphics View Framework

框架中

可以選擇重寫

void QGraphicsItem::advance(int phase)

來實現

比如經典的這個小老鼠動畫

Thinking in Qt ( Ⅹ )

後來 qml 出現,可以做出這樣的動畫

Thinking in Qt ( Ⅹ )

NumberAnimation PauseAnimation 實現字母 G 和 S 的動畫

ParticleSystem

ImageParticle 實現白色粒子效果動畫

SpringAnimation 實現方塊出現和消失時的彈簧動畫

Thinking in Qt ( Ⅹ )

Flipable

專門實現卡牌的翻轉動畫

qml 還提供了

SpriteSequence

AnimatedSprite

來實現動畫

Thinking in Qt ( Ⅹ )

Thinking in Qt ( Ⅹ )

兩者有什麼區別呢,簡單說就同樣是序列幀,前者能來回跳幀,後者只能暫停與播放

我們都知道,動畫就是序列幀的快速播放。

所以,更早期一些,在這些動畫類都沒定義前

常常用最基本的定時器 QBasicTimer 去實現動畫

每隔一段時間(下圖是60ms一次)就去重繪介面

Thinking in Qt ( Ⅹ )

還有用 QMovie 直接播放 gif

Thinking in Qt ( Ⅹ )

以上主要歸納了常見 Qt 實現 2D 動畫的方式

接下來應該是 show 程式碼的時刻了,但感覺篇幅太長了,而且都是 Qt 自帶的 demo

∴ 略。

BTW,這篇略水,下一篇重點講講 Qt 在 3D 中的動畫吧

To be continued。。。。