Sur cette page

Les animations

Qt Quick permet d'animer les propriétés. L'animation des propriétés permet aux valeurs des propriétés de passer par des valeurs intermédiaires au lieu de passer immédiatement à la valeur cible. Pour animer la position d'un élément, vous pouvez animer les propriétés qui contrôlent la position de l'élément, x et y par exemple, de sorte que la position de l'élément change à chaque image pour atteindre la position cible.

Des interfaces utilisateur fluides

QML a été conçu pour faciliter la création d'interfaces utilisateur fluides. Il s'agit d'interfaces utilisateur dont les composants s'animent au lieu d'apparaître, de disparaître ou de sauter brusquement. Qt Quick propose deux méthodes simples pour faire en sorte que les composants de l'interface utilisateur se déplacent avec animation au lieu d'apparaître instantanément à leur nouvel emplacement.

États et transitions

Qt Quick vous permet de déclarer divers états de l'interface utilisateur dans les objets State. Ces états sont constitués de changements de propriétés à partir d'un état de base et peuvent constituer un moyen utile d'organiser votre logique d'interface utilisateur. Les transitions sont des objets que vous pouvez associer à un élément pour définir la façon dont ses propriétés s'animeront lorsqu'elles changeront en raison d'un changement d'état.

Les états et les transitions d'un élément peuvent être déclarés à l'aide des propriétés Item::states et Item::transitions. Les états sont déclarés à l'intérieur de la propriété states list d'un élément, généralement l'élément racine du composant. Les transitions définies sur le même élément sont utilisées pour animer les changements d'état. Voici un exemple.

Item {
    id: container
    width: 320
    height: 120

    Rectangle {
        id: rect
        color: "red"
        width: 120
        height: 120

        TapHandler {
            onTapped: container.state === '' ? container.state = 'other' : container.state = ''
        }
    }
    states: [
        // This adds a second state to the container where the rectangle is farther to the right

        State { name: "other"

            PropertyChanges {
                target: rect
                x: 200
            }
        }
    ]
    transitions: [
        // This adds a transition that defaults to applying to all state changes

        Transition {

            // This applies a default NumberAnimation to any changes a state change makes to x or y properties
            NumberAnimation { properties: "x,y" }
        }
    ]
}

Animation des changements de propriété.

Les comportements peuvent être utilisés pour spécifier une animation pour une propriété à utiliser lorsqu'elle change. Cette animation est ensuite appliquée à tous les changements, quelle que soit leur source. L'exemple suivant illustre l'animation d'un bouton se déplaçant à l'écran à l'aide de comportements.

Item {
    width: 320
    height: 120

    Rectangle {
        color: "green"
        width: 120
        height: 120

        // This is the behavior, and it applies a NumberAnimation to any attempt to set the x property
        Behavior on x {

            NumberAnimation {
                //This specifies how long the animation takes
                duration: 600
                //This selects an easing curve to interpolate with, the default is Easing.Linear
                easing.type: Easing.OutBounce
            }
        }

        TapHandler {
            onTapped: parent.x == 0 ? parent.x = 200 : parent.x = 0
        }
    }
}

Autres animations

Toutes les animations ne doivent pas nécessairement être liées à une propriété ou à un état spécifique. Vous pouvez également créer des animations de manière plus générale et spécifier des éléments et des propriétés cibles dans l'animation. Voici quelques exemples de différentes manières de procéder :

Item {
    width: 320
    height: 120

    Rectangle {
        color: "blue"
        width: 120
        height: 120

        // By setting this SequentialAnimation on x, it and animations within it will automatically animate
        // the x property of this element
        SequentialAnimation on x {
            id: xAnim
            // Animations on properties start running by default
            running: false
            loops: Animation.Infinite // The animation is set to loop indefinitely
            NumberAnimation { from: 0; to: 200; duration: 500; easing.type: Easing.InOutQuad }
            NumberAnimation { from: 200; to: 0; duration: 500; easing.type: Easing.InOutQuad }
            PauseAnimation { duration: 250 } // This puts a bit of time between the loop
        }

        TapHandler {
            // The animation starts running when you click within the rectangle
            onTapped: xAnim.running = true
        }
    }
}
Item {
    width: 320
    height: 120

    Rectangle {
        id: rectangle
        color: "yellow"
        width: 120
        height: 120

        TapHandler {
            // The animation starts running when you click within the rectangle
            onTapped: anim.running = true;
        }
    }

    // This animation specifically targets the Rectangle's properties to animate
    SequentialAnimation {
        id: anim
        // Animations on their own are not running by default
        // The default number of loops is one, restart the animation to see it again

        NumberAnimation { target: rectangle; property: "x"; from: 0; to: 200; duration: 500 }

        NumberAnimation { target: rectangle; property: "x"; from: 200; to: 0; duration: 500 }
    }
}

Pour plus d'informations sur les animations, consultez la page Concepts importants de Qt Quick - États, transitions et animations.

© 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.