全部的動畫組件都是繼承於Animation,因此咱們先來介紹下它們的父組件Animation.dom
1.Animation
須要注意的是若是直接使用Animation將致使錯誤。它的存在只是爲了給子組件提供一組公共屬性和方法,這些屬性和方法可在繼承自它的全部其餘動畫類型中使用。
Propertieside
Signals函數
Methodsoop
測試alwaysRunToEnd屬性
因爲Animation是虛組件,不能直接使用,因此咱們以它的子組件PropertyAnimation爲例:測試
Column { Button { text: "啓動動畫" onClicked: { animation.start() } } Button { text: "中止動畫" onClicked: { animation.stop() } } Rectangle { id: rect width: 20 height: 20 color: "#000000" PropertyAnimation { id:animation; loops: Animation.Infinite alwaysRunToEnd: true target: rect property: "x" from: 0; to: 100; duration: 500 } } }
當咱們啓動動畫後,點擊中止動畫按鈕時,此時必須到了終點才中止.
2.PropertyAnimation - 改變property屬性時能夠產生的動畫
PropertiesAniation用來給target目標下的property屬性更改分配一個動畫的組件.它的父組件是Animation
Properties動畫
示例以下所示:rest
Column { Button { text: "啓動動畫" onClicked: { animation.start() } } Button { text: "中止動畫" onClicked: { animation.stop() } } Rectangle { id: rect1 width: 20 height: 20 color: "#0000FF" } Rectangle { id: rect2 width: 20 height: 20 color: "#FF0000" } } PropertyAnimation { id:animation; loops: Animation.Infinite alwaysRunToEnd: true targets: [rect1,rect2] property: "x" easing.type: Easing.InQuad from: 0; to: 100; duration: 2000 }
當咱們點擊啓動按鈕後,就會啓動rect1和rect2的x屬性從座標0到100進行移動的動畫.對象
假如一個動畫只針對一個目標對象的一個屬性,那麼咱們可使用 XXXAnimation on Property { ... }寫法,這樣就不須要指定target和property了,更加便捷:繼承
Column { Button { text: "啓動動畫" onClicked: { animation.start() } } Button { text: "中止動畫" onClicked: { animation.stop() } } Rectangle { id: rect1 width: 20 height: 20 color: "#00FF00" PropertyAnimation on x { id:animation; loops: Animation.Infinite alwaysRunToEnd: true easing.type: Easing.InQuad running: false from: 0; to: 100; duration: 2000 } } }
須要注意的是該寫法的running是默認爲true,因此若是不想當即啓動動畫,則須要初始化爲false.get
NumberAnimation和ColorAnimation
它們都是繼承於PropertyAnimation組件,而後重寫了from和to屬性,使用方法其實和PropertyAnimation同樣.
示例以下所示:
MouseArea { id: area anchors.fill: parent onPressed: { colorAnimation.to = Qt.rgba(Math.random(),Math.random(),Math.random(),1) // 從新賦一個顏色 numberAnimation.restart() } } Rectangle { id: rect anchors.centerIn: parent color: "#00FF00" width: 20 height: 20 NumberAnimation on width{ id: numberAnimation duration: 300 to: rect.width*1.3 running: false } ColorAnimation on color{ id: colorAnimation duration: 300 to: Qt.rgba(Math.random(),Math.random(),Math.random(),1) running: numberAnimation.running } }
當咱們點擊一次,Rectangle的寬度將會變寬一次,而且顏色也會跟着改變.