日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

91.动画的简单使用

發布時間:2024/1/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 91.动画的简单使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

動畫繼承結構圖如下所示

QAbstractAnimation 抽象動畫

  • QAnimationGroup 動畫組
    • QParallelAnimationGroup 同時做的動畫組
    • QSequentialAnimationGroup 順序做的動畫組
  • QPauseAnimation 暫停動畫
  • QVariantAnimation 變體動畫
    • QPropertyAnimation 屬性動畫

目錄

1??動畫使用步驟

1.1??構造動畫對象并設置目標屬性

1.1.1??構造函數

1.1.2??添加屬性

1.1.3??添加對象

1.2??設置開始值,結束值

1.3??設置時長 setDuration()

1.4??啟動動畫

2??完善步驟

2.1??尺寸更改 size

2.2??位置和大小 geometry

2.3??窗口不透明度 windowOpacity

2.4??設置插入值 setKeyValueAt()

2.5??設置動畫速度曲線 setEasingCurve()

3??QVariantAnimation

4??QAbstractAnimation 方法

4.1??循環操作

4.1.1??設置 setLoopCount()

4.1.2??獲取一共循環幾次 loopCount()

4.1.3??獲取當前是第幾次循環 currentLoop()

4.1.4??獲取當前循環內進行的時間 currentLoopTime()

4.2??時間操作

4.3??動畫方向

4.3.1??設置 setDirection()

4.3.2??獲取 direction()

4.4??常用操作

4.5??動畫狀態

4.6??狀態案例

5??常用信號

6??動畫組

6.1??QAnimationGroup

6.2??QParallelAnimationGroup 并行動畫

6.3??QSequentialAnimationGroup 串行(順序)動畫

6.3.1??加入暫停動畫

6.3.2??獲取當前動畫

6.3.3??信號


1??動畫使用步驟

我們使用QPropertyAnimation做一個例子

直接父類是QVariantAnimation,用于實現屬性值變換時的動畫,我們使用時大概分為下面這幾步

我們首先創建一個按鈕

1.1??構造動畫對象并設置目標屬性

1.1.1??構造函數

這個構造函數有兩種寫法,一種是直接寫父對象,第二種是把目標和屬性也寫進去

1.1.2??添加屬性

如果在這里只寫入了父對象,也可以通過類中的方法添加屬性

后面的參數需要一個字節類型的值,我們這樣寫,這個的意思就是做動畫對象的pos這個屬性

  • 可以使用dynamicPropertyNames()獲取對象的所有屬性,這個在4.QObject的基本用法2.1 中提到過

1.1.3??添加對象

我們做一個例子

創建一個動畫對象,作用目標是btn,作用屬性是pos

也可以寫到一起

1.2??設置開始值,結束值

我們現在設置開始值和結束值,讓目標從(0,0)移動到(100,100)

1.3??設置時長 setDuration()

我們現在設置動畫時長為3000ms

1.4??啟動動畫

我們現在直接令其打開窗口就啟動動畫,所以在代碼后面直接加start()就可以了

運行之后確實發現按鈕在移動

2??完善步驟

在更改屬性中,我們常用的屬性有下面這四個

剛才我們測試過了pos,現在我們測試別的

2.1??尺寸更改 size

這樣這個按鈕就用從小變大了

2.2??位置和大小 geometry

這個屬性的含義是尺寸與位置的結合

對應變量類型為QRect(),前面兩個值為位置,后面兩個值為大小,QRect(x,y,寬,高)

這個動畫就會改變位置和大小

2.3??窗口不透明度 windowOpacity

它的取值范圍是[0,1]中所有浮點數,1是不透明,0是透明

我們現在從透明 變到 不透明

2.4??設置插入值 setKeyValueAt()

我現在想讓窗口一次從 透明 變到 不透明,然后再從 不透明 變到 透明,這個時候我們需要用到插值

第一個參數是在動畫進行到什么時候變為后面的值,取值[0,1]之間所有浮點數,第二個參數是變成的值

我們也可以使用setKeyValueAt()代替結束值

經測試效果相同

可以插入多個插值

2.5??設置動畫速度曲線 setEasingCurve()

這個是對動畫的速度進行設置,我們如果沒設置的話就是勻速進行動畫,如果設置就會變速進行動畫,不光是移動可以使用動畫速度曲線,改變透明度,改變尺寸也可以使用動畫速度曲線

  • 感覺上還是插入值好用一些

在官方文檔中可以查看取什么值

也可以在庫中的py文件中查看,這個我就不每個都試一遍了

BezierSpline = 45 CosineCurve = 44 Custom = 47 InBack = 33 InBounce = 37 InCirc = 25 InCubic = 5 InCurve = 41 InElastic = 29 InExpo = 21 InOutBack = 35 InOutBounce = 39 InOutCirc = 27 InOutCubic = 7 InOutElastic = 31 InOutExpo = 23 InOutQuad = 3 InOutQuart = 11 InOutQuint = 15 InOutSine = 19 InQuad = 1 InQuart = 9 InQuint = 13 InSine = 17 Linear = 0 OutBack = 34 OutBounce = 38 OutCirc = 26 OutCubic = 6 OutCurve = 42 OutElastic = 30 OutExpo = 22 OutInBack = 36 OutInBounce = 40 OutInCirc = 28 OutInCubic = 8 OutInElastic = 32 OutInExpo = 24 OutInQuad = 4 OutInQuart = 12 OutInQuint = 16 OutInSine = 20 OutQuad = 2 OutQuart = 10 OutQuint = 14 OutSine = 18 SineCurve = 43 TCBSpline = 46

下面這個彈簧效果是用的比較多的,可以試一下

3??QVariantAnimation

QVariantAnimation是QPropertyAnimation的直接父類,下面這些方法也都介紹過,就不一一測試了

4??QAbstractAnimation 方法

是所有動畫類對象的基類,我們說一下之前沒涉及到的操作,動畫對象我們還是使用QPropertyAnimation

4.1??循環操作

4.1.1??設置 setLoopCount()

我們現在有一個移動位置的動畫

現在我們讓他循環三次

確實運行了三次

4.1.2??獲取一共循環幾次 loopCount()

我們可以把這個方法綁定給我們做動畫的按鈕

運行之后在每一次做動畫時都按一下按鈕

4.1.3??獲取當前是第幾次循環 currentLoop()

也是一樣,綁在按鈕上,每做一次動畫點擊一次

4.1.4??獲取當前循環內進行的時間 currentLoopTime()

也是一樣,綁在按鈕上,每做一次動畫點擊一次

這三個值都是運行的毫秒數

4.2??時間操作

這個就是字面意思,當前時長是相對于動畫總時長的時長,這三個都是獲取,不做測試了

4.3??動畫方向

參數QAbstractAnimation.Direction有兩個可選參數

  • 0 - QAbstractAnimation.Forward 正向動畫
  • 1 - QAbstractAnimation.Backward 反向動畫

4.3.1??設置 setDirection()

默認是正向動畫,我們現在設置為反向動畫

經測試,按鈕從(100,100)移動到(0,0)

  • 這個例子是改位置屬性,改其他屬性同樣可以更改動畫方向

4.3.2??獲取 direction()

  • 如果動畫方向更改,它的時間也會更改,是反著走的,比如說我設置動畫時間為3000ms,如果正向就是0->3000,如果反向就是3000->0

4.4??常用操作

  • start() 動畫開始,在其中可以放動畫的刪除策略
  • pause() 動畫暫停
  • resume() 動畫繼續
  • stop() 動畫停止
  • setCurrentTime() 設置當前動畫時間
  • setPause() 設置動畫是否暫停,True為暫停,False為不暫停

動畫的刪除策略有兩個可選值

  • QAbstractAnimation.KeepWhenStoped 停止時不會刪除動畫
  • QAbstractAnimation.DeleteWhenStopped 停止時動畫將自動刪除
  • 注:這里的刪除是真的刪除了,刪除之后無法再使用start啟動,也就是說動畫對象被釋放掉了

這個就是字面意思,就不測試了

4.5??動畫狀態

這個是獲取當前動畫的狀態,有三個返回值

  • QAbstractAnimation.Stopped 停止狀態
  • QAbstractAnimation.Paused 暫停狀態
  • QAbstractAnimation.Running 運行狀態

4.6??狀態案例

我們對這個狀態做一個綜合的案例,我們現在有兩個按鈕,一個控制start和stop,一個控制暫停和啟動

當前我有這樣一個動畫

然后我搞兩個按鈕,然后再搞兩個槽函數

經測試可以達到效果

  • 點下停止之后它會停在原地,此時使用start()它會從初始位置啟動

5??常用信號

  • currentLoopChanged() 完成循環時觸發,會傳遞當前的循環輪數
  • directionChanged() 動畫方向改變時觸發,會傳遞當前的方向
  • finished() 動畫播放完成時觸發(如果有循環就是所有循環都走完觸發)
  • stateChanged() 動畫狀態改變時觸發,會傳遞兩個參數,第一個為新的狀態,第二個為老的狀態

6??動畫組

6.1??QAnimationGroup

是動畫組的基類,有以下功能

動畫組使用添加動畫方法就可以添加另一個動畫組

我們一會兒使用子類做例子驗證上面的方法

我們現在做這樣一個動畫,現在有兩個按鈕,紅按鈕順時針走矩形,藍按鈕逆時針走矩形

為了方便看我們把窗口搞大一點,然后放兩個按鈕

先搞紅按鈕的動畫,先用start測試以下,測試后刪掉

發現可以成功的走

再搞藍按鈕

由于現在是兩個我都使用了start(),所以現在它們是并行運行

6.2??QParallelAnimationGroup 并行動畫

同時執行動畫的動畫組

我們現在把start()刪掉,然后創建一個并行動畫組,把兩個動畫加入到動畫組里,然后start

經測試可以成功并行執行動畫

如果想讓動畫組進行循環,我們直接就可以對動畫組加入循環

經測試有效

6.3??QSequentialAnimationGroup 串行(順序)動畫

順序執行動畫的動畫組

發現可以成功串行執行動畫,先移動btn1,后移動btn2

下面三個功能是 QSequentialAnimationGroup 獨有的功能

6.3.1??加入暫停動畫

我們可以在動畫執行過程中加入暫停,比如我現在暫停3000ms

這樣btn2會在btn1結束后3000ms再開始運動

也可以插入暫停

上面的插入暫停和加入暫停效果相同

暫停也算動畫對象的一種,這個類我們在上面的繼承結構圖看過,在這

在QPauseAnimation中有設置暫停時長setDuration()這一功能

6.3.2??獲取當前動畫

獲取當前播放的動畫,暫停也算動畫一種,如果此時處于暫停狀態算暫停動畫

6.3.3??信號

當播放動畫發生改變時觸發該信號,會傳遞當前的動畫對象

先是由btn1切換到暫停動畫觸發一次,然后暫停動畫切換到btn2又觸發一次

總結

以上是生活随笔為你收集整理的91.动画的简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。