Qt Quick Exemples - Animation
Voici une collection d'exemples d'animation QML.

La section «Animation » regroupe de petits exemples QML liés à l'animation. Chaque exemple est un petit fichier QML mettant en avant un type ou une fonctionnalité particulière.
Pour plus d’informations sur les animations, consultez la section « Concepts importants dans l’ Qt Quick: états, transitions et animations ».
Exécution de l'exemple
Vous pouvez exécuter l'exemple à partir de :
- Qt Creator
Ouvrez le mode « Welcome » et sélectionnez l’exemple dans « Examples ». Pour plus d’informations, consultez Qt Creator: Tutoriel : Compiler et exécuter.
- Qt Extension for Visual Studio Code
Exécutez la commande « Qt: Open Qt examples » à partir de Command Palette, puis sélectionnez l'exemple dans la liste. Pour plus d'informations, consultez Qt Extension for Visual Studio Code: Tutoriel : Compiler et exécuter.
ColorAnimation
ColorAnimation utilise des animations de couleur pour faire passer le ciel du jour à la nuit.
gradient: Gradient {
GradientStop {
position: 0.0
SequentialAnimation on color {
loops: Animation.Infinite
ColorAnimation { from: "#14148c"; to: "#0E1533"; duration: 5000 }
ColorAnimation { from: "#0E1533"; to: "#14148c"; duration: 5000 }
}
}
GradientStop {
position: 1.0
SequentialAnimation on color {
loops: Animation.Infinite
ColorAnimation { from: "#14aaff"; to: "#437284"; duration: 5000 }
ColorAnimation { from: "#437284"; to: "#14aaff"; duration: 5000 }
}
}
}PropertyAnimation
PropertyAnimation utilise des animations numériques pour faire rebondir un cercle de haut en bas.
// Animate the y property. Setting loops to Animation.Infinite makes the
// animation repeat indefinitely, otherwise it would only run once.
SequentialAnimation on y {
loops: Animation.Infinite
// Move from minHeight to maxHeight in 300ms, using the OutExpo easing function
NumberAnimation {
from: smiley.minHeight; to: smiley.maxHeight
easing.type: Easing.OutExpo; duration: 300
}
// Then move back to minHeight in 1 second, using the OutBounce easing function
NumberAnimation {
from: smiley.maxHeight; to: smiley.minHeight
easing.type: Easing.OutBounce; duration: 1000
}
// Then pause for 500ms
PauseAnimation { duration: 500 }
}Animators
Animators utilise des animateurs pour faire rebondir une icône de haut en bas.
SequentialAnimation {
SequentialAnimation {
ParallelAnimation {
YAnimator {
target: smiley;
from: smiley.minHeight;
to: smiley.maxHeight
easing.type: Easing.OutExpo;
duration: 300
}
ScaleAnimator {
target: shadow
from: 1
to: 0.5
easing.type: Easing.OutExpo;
duration: 300
}
}
ParallelAnimation {
YAnimator {
target: smiley;
from: smiley.maxHeight;
to: smiley.minHeight
easing.type: Easing.OutBounce;
duration: 1000
}
ScaleAnimator {
target: shadow
from: 0.5
to: 1
easing.type: Easing.OutBounce;
duration: 1000
}
}
}
PauseAnimation { duration: 500 }
running: true
loops: Animation.Infinite
}Comportements
Comportements utilise des comportements pour déplacer un rectangle à l'endroit où vous cliquez.
// Set an 'elastic' behavior on the focusRect's y property.
Behavior on y {
NumberAnimation {
easing.type: Easing.OutElastic
easing.amplitude: 3.0
easing.period: 2.0
duration: 300
}
}Texte ondulant
Texte ondulant montre comment utiliser des comportements plus complexes pour animer et faire onduler du texte lorsque vous le faites glisser. Pour ce faire, il attribue une liaison complexe à chaque lettre :
x: follow ? follow.x + follow.width : container.width / 6
y: follow ? follow.y : container.height / 2Ensuite, il utilise des comportements pour animer le mouvement de chaque lettre :
Behavior on x { enabled: container.animated; SpringAnimation { spring: 3; damping: 0.3; mass: 1.0 } }
Behavior on y { enabled: container.animated; SpringAnimation { spring: 3; damping: 0.3; mass: 1.0 } }Tv Tennis
Tv Tennis utilise des comportements complexes pour faire suivre la balle par les raquettes et simuler ainsi un match de tennis sans fin. Là encore, une liaison dépendant d’autres valeurs est appliquée à la position et un comportement assure l’animation.
Courbes d’accélération
«Easing Curves » présente toutes les courbes d’accélération disponibles dans les animations d’ Qt Quick.
États
États montre comment les propriétés d’un élément peuvent varier d’ un état à l’autre.
Il définit plusieurs états :
// In state 'middleRight', move the image to middleRightRect
State {
name: "middleRight"
PropertyChanges {
userIcon {
x: middleRightRect.x
y: middleRightRect.y
}
}
},
// In state 'bottomLeft', move the image to bottomLeftRect
State {
name: "bottomLeft"
PropertyChanges {
userIcon {
x: bottomLeftRect.x
y: bottomLeftRect.y
}
}
}Transitions
« Transitions » reprend l’exemple des « États » et anime les changements de propriétés en définissant des transitions :
// Transitions define how the properties change when the item moves between each state
transitions: [
// When transitioning to 'middleRight' move x,y over a duration of 1 second,
// with OutBounce easing function.
Transition {
from: "*"; to: "middleRight"
NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce; duration: 1000 }
},
// When transitioning to 'bottomLeft' move x,y over a duration of 2 seconds,
// with InOutQuad easing function.
Transition {
from: "*"; to: "bottomLeft"
NumberAnimation { properties: "x,y"; easing.type: Easing.InOutQuad; duration: 2000 }
},
// For any other state changes move x,y linearly over duration of 200ms.
Transition {
NumberAnimation { properties: "x,y"; duration: 200 }
}PathAnimation
PathAnimation anime une image le long d'une courbe de Bézier à l'aide d'un PathAnimation.
PathAnimation {
id: pathAnim
duration: 2000
easing.type: Easing.InQuad
target: box
orientation: PathAnimation.RightFirst
anchorPoint: Qt.point(box.width/2, box.height/2)
path: Path {
startX: 50; startY: 50
PathCubic {
x: window.width - 50
y: window.height - 50
control1X: x; control1Y: 50
control2X: 50; control2Y: y
}
onChanged: canvas.requestPaint()
}
}PathInterpolator
PathInterpolator anime une image le long de la même courbe de Bézier, en utilisant à la place un PathInterpolator.
PathInterpolator {
id: motionPath
path: Path {
startX: 50; startY: 50
PathCubic {
x: window.width - 50
y: window.height - 50
control1X: x; control1Y: 50
control2X: 50; control2Y: y
}
onChanged: canvas.requestPaint()
}
SequentialAnimation on progress {
running: true
loops: -1
PauseAnimation { duration: 1000 }
NumberAnimation {
id: progressAnim
running: false
from: 0; to: 1
duration: 2000
easing.type: Easing.InQuad
}
}
}© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.