QML-Tutorial 3 - Zustände und Übergänge
In diesem Kapitel machen wir das Beispiel ein wenig dynamischer, indem wir Zustände und Übergänge einführen.
Wir wollen, dass unser Text an den unteren Rand des Bildschirms wandert, sich dreht und rot wird, wenn er angeklickt wird.
Hier ist der QML-Code:
import QtQuick Rectangle { id: page width: 320; height: 480 color: "lightgray" Text { id: helloText text: "Hello world!" y: 30 anchors.horizontalCenter: page.horizontalCenter font.pointSize: 24; font.bold: true MouseArea { id: mouseArea; anchors.fill: parent } states: State { name: "down"; when: mouseArea.pressed == true PropertyChanges { helloText { y: 160 rotation: 180 color: "red" } } } transitions: Transition { from: ""; to: "down"; reversible: true ParallelAnimation { NumberAnimation { properties: "y,rotation"; duration: 500; easing.type: Easing.InOutQuad } ColorAnimation { duration: 500 } } } } Grid { id: colorPicker x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4 rows: 2; columns: 3; spacing: 3 Cell { cellColor: "red"; onClicked: helloText.color = cellColor } Cell { cellColor: "green"; onClicked: helloText.color = cellColor } Cell { cellColor: "blue"; onClicked: helloText.color = cellColor } Cell { cellColor: "yellow"; onClicked: helloText.color = cellColor } Cell { cellColor: "steelblue"; onClicked: helloText.color = cellColor } Cell { cellColor: "black"; onClicked: helloText.color = cellColor } } }
Komplettlösung
states: State { name: "down"; when: mouseArea.pressed == true PropertyChanges { helloText { y: 160 rotation: 180 color: "red" } } }
Zunächst erstellen wir einen neuen Zustand für unseren Texttyp "nach unten". Dieser Zustand wird aktiviert, wenn die Taste MouseArea gedrückt wird, und deaktiviert, wenn sie losgelassen wird.
Der Abwärtszustand umfasst eine Reihe von Eigenschaftsänderungen gegenüber unserem impliziten Standardzustand (die Elemente, wie sie ursprünglich in QML definiert wurden). Insbesondere setzen wir die Eigenschaft y
des Textes auf 160
, die Rotation auf 180
und color
auf rot.
transitions: Transition { from: ""; to: "down"; reversible: true ParallelAnimation { NumberAnimation { properties: "y,rotation"; duration: 500; easing.type: Easing.InOutQuad } ColorAnimation { duration: 500 } } }
Da wir nicht wollen, dass der Text sofort unten erscheint, sondern sich sanft bewegt, fügen wir einen Übergang zwischen unseren beiden Zuständen hinzu.
from
und to
definieren die Zustände, zwischen denen der Übergang stattfinden soll. In diesem Fall wollen wir einen Übergang vom Standardzustand zum Zustand "unten".
Da wir wollen, dass derselbe Übergang in umgekehrter Reihenfolge abläuft, wenn wir aus dem Abwärtszustand in den Standardzustand zurückwechseln, setzen wir reversible
auf true
. Dies ist gleichbedeutend damit, die beiden Übergänge getrennt zu schreiben.
Der Typ ParallelAnimation stellt sicher, dass die beiden Arten von Animationen (Zahl und Farbe) zur gleichen Zeit beginnen. Wir könnten sie auch nacheinander ablaufen lassen, indem wir stattdessen SequentialAnimation verwenden.
Weitere Einzelheiten zu Zuständen und Übergängen finden Sie unter Qt Quick Zustände und das Beispiel für Zustände und Übergänge.
© 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.