Anwendungsfall - Animationen in QML
Qt Quick bietet die Möglichkeit, Eigenschaften zu animieren. Die Animation von Eigenschaften ermöglicht es, dass sich Eigenschaftswerte durch Zwischenwerte bewegen, anstatt sofort auf den Zielwert zu wechseln. Um die Position eines Elements zu animieren, können Sie die Eigenschaften animieren, die die Position des Elements steuern, z. B. x und y, so dass sich die Position des Elements in jedem Frame auf dem Weg zur Zielposition ändert.
Fließende Benutzeroberflächen
QML wurde entwickelt, um die Erstellung von fließenden Benutzeroberflächen zu erleichtern. Dabei handelt es sich um Benutzeroberflächen, bei denen die UI-Komponenten animiert werden, anstatt abrupt zu erscheinen, zu verschwinden oder zu springen. Qt Quick bietet zwei einfache Möglichkeiten, um UI-Komponenten animiert zu bewegen, anstatt sie sofort an ihrer neuen Position erscheinen zu lassen.
Zustände und Übergänge
Qt Quick ermöglicht es Ihnen, verschiedene UI-Zustände in State Objekten zu deklarieren. Diese Zustände bestehen aus Eigenschaftsänderungen von einem Basiszustand aus und können eine nützliche Möglichkeit sein, Ihre UI-Logik zu organisieren. Übergänge sind Objekte, die Sie mit einem Element verknüpfen können, um zu definieren, wie seine Eigenschaften animiert werden, wenn sie sich aufgrund einer Zustandsänderung ändern.
Zustände und Übergänge für ein Element können mit den Eigenschaften Item::states und Item::transitions deklariert werden. Zustände werden innerhalb der Eigenschaft "Zustandsliste" eines Elements, in der Regel des Stammelements der Komponente, deklariert. Übergänge, die für dasselbe Element definiert sind, werden verwendet, um die Änderungen des Zustands zu animieren. Hier ist ein Beispiel.
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" } } ] }
Animieren von Eigenschaftsänderungen.
Mithilfe von Verhaltensweisen kann eine Animation für eine Eigenschaft festgelegt werden, die bei Änderungen verwendet werden soll. Diese wird dann auf alle Änderungen angewendet, unabhängig von ihrer Quelle. Das folgende Beispiel animiert eine Schaltfläche, die sich mit Hilfe von Verhaltensweisen auf dem Bildschirm bewegt.
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 } } }
Andere Animationen
Nicht alle Animationen müssen an eine bestimmte Eigenschaft oder einen bestimmten Zustand gebunden sein. Sie können Animationen auch allgemeiner erstellen und Zielelemente und Eigenschaften innerhalb der Animation angeben. Hier finden Sie einige Beispiele für verschiedene Möglichkeiten:
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 } } }
Weitere Informationen zu Animationen finden Sie auf der Seite Wichtige Konzepte in Qt Quick - Zustände, Übergänge und Animationen.
© 2025 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.