QMLチュートリアル3 - 状態と遷移

この章では、ステートとトランジションを導入することで、この例をもう少しダイナミックにします。

テキストが画面の下に移動し、回転し、クリックされると赤くなるようにします。

これがQMLのコードです:

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 }
    }
}

チュートリアル

        states: State {
            name: "down"; when: mouseArea.pressed == true
            PropertyChanges {
                helloText {
                    y: 160
                    rotation: 180
                    color: "red"
                }
            }
        }

まず、テキストタイプに新しいダウン状態を作ります。この状態は、MouseArea を押すとアクティブになり、離すと非アクティブになります。

ダウン状態には、暗黙のデフォルト状態(QMLで最初に定義された項目)からのプロパティの変更が含まれます。具体的には、テキストのy プロパティを160 に、回転を180 に、そしてcolor を赤に設定しています。

        transitions: Transition {
            from: ""; to: "down"; reversible: true
            ParallelAnimation {
                NumberAnimation { properties: "y,rotation"; duration: 500; easing.type: Easing.InOutQuad }
                ColorAnimation { duration: 500 }
            }
        }

テキストを瞬時に一番下に表示するのではなく、スムーズに移動させたいので、2つの状態の間に遷移を追加します。

from と は、トランジションが実行される状態を定義します。この場合、デフォルトの状態からto 下の状態へのトランジションが必要です。

ダウン状態からデフォルト状態に戻るときに、同じトランジションを逆に実行させたいので、reversibletrue に設定します。これは、2つのトランジションを別々に書くのと同じことです。

ParallelAnimation 、2種類のアニメーション(数字と色)が同時に始まるようにします。また、SequentialAnimation を使用することで、2つのアニメーションを同時に実行することもできます。

ステートとトランジションの詳細については、Qt Quick Statesと ステートとトランジションの例を参照してください。

©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。