Qt Quick

AnchorChanges

状態変更でアイテムのアンカーを変更する方法を指定します。

ParentChange

状態の変更でアイテムを再ペアレントする方法を指定する

PropertyChanges

状態の新しいプロパティのバインディングまたは値を記述する

State

オブジェクトとプロパティの構成を定義する

StateChangeScript

状態でのスクリプトの実行方法を指定します。

StateGroup

Itemタイプ以外の組み込みステートサポートを提供します。

多くのユーザー・インターフェース設計はステート駆動型であり、インターフェースには現在のステートによって異なる構成があります。たとえば、交通信号はその状態に応じてフラグやライトを設定します。信号のstop 状態では、赤のライトが点灯し、黄色と緑のライトは消灯します。caution の状態では、黄色信号が点灯し、他の信号は消灯します。

QMLでは、状態は State タイプで定義されたプロパティ構成のセットです。例えば、以下のような設定が可能です:

  • あるUIコンポーネントを表示し、他のコンポーネントを非表示にする
  • 利用可能なアクションをユーザーに提示する
  • アニメーションの開始、停止、一時停止
  • 新しい状態で必要なスクリプトを実行する
  • 特定のアイテムのプロパティ値を変更する
  • 別のビューや画面を表示する

すべてのItem ベースのオブジェクトはstate プロパティを持ち、アイテムのstates プロパティに新しいState オブジェクトを追加することで、追加の状態を指定できます。コンポーネント内の各状態は一意のname を持ち、空の文字列がデフォルトです。アイテムの現在の状態を変更するには、state プロパティを状態の名前に設定します。

アイテム以外のオブジェクトは、StateGroup タイプを使用してステートを使用できます。

状態の作成

状態を作成するには、State オブジェクトをアイテムのstates プロパティに追加します。

警告signal コンポーネントは、NORMALCRITICAL の2つの状態を持つことができます。NORMAL 状態では、シグナルのcolorgreen で、警告flag はダウンしているとします。一方、CRITICAL の状態では、colorred で、フラグがup であるとする。状態をState 型で、色と旗の構成をPropertyChanges 型でモデル化することができる。

Rectangle {
    id: signal
    width: 200; height: 200
    state: "NORMAL"

    states: [
        State {
            name: "NORMAL"
            PropertyChanges { target: signal; color: "green"}
            PropertyChanges { target: flag; state: "FLAG_DOWN"}
        },
        State {
            name: "CRITICAL"
            PropertyChanges { target: signal; color: "red"}
            PropertyChanges { target: flag; state: "FLAG_UP"}
        }
    ]
}

PropertyChanges 型はオブジェクトのプロパティの値を変更する。オブジェクトはidを通して参照される。コンポーネントの外部にあるオブジェクトも、id プロパティを使用して参照されます。これは、外部のflag オブジェクトへのプロパティ変更で例証されています。

さらに、state プロパティに適切な信号の状態を代入することで、状態を変更することができる。状態スイッチは、MouseArea 型で、信号がマウスクリックを受信するたびに異なる状態を割り当てることができる。

Rectangle {
    id: signalswitch
    width: 75; height: 75
    color: "blue"

    MouseArea {
        anchors.fill: parent
        onClicked: {
            if (signal.state == "NORMAL")
                signal.state = "CRITICAL"
            else
                signal.state = "NORMAL"
        }
    }
}

Stateタイプは、プロパティ値の変更に限定されません。次のようなことも可能です:

デフォルトの状態

すべてのItem ベースのコンポーネントには、state プロパティとデフォルト状態があります。デフォルト状態は空の文字列 ("") で、アイテムのすべての初期プロパティ値を含みます。デフォルト状態は、状態を変更する前にプロパティ値を管理するのに便利です。state プロパティを空文字列に設定すると、デフォルト状態がロードされます。

when プロパティ

便利なように、State タイプには、when プロパティがあり、式にバインドして、バインドされた式がtrue と評価されるたびに状態を変更できます。when プロパティは、式が false と評価されると状態をデフォルト状態に戻します。

Rectangle {
    id: bell
    width: 75; height: 75
    color: "yellow"

    states: State {
                name: "RINGING"
                when: (signal.state == "CRITICAL")
                PropertyChanges {target: speaker; play: "RING!"}
            }
}

bell コンポーネントは、signal.stateCRITICAL になるたびに、RINGING の状態に変更されます。

状態変化のアニメーション

状態の変化は、急激な値の変化を引き起こします。Transition 、状態遷移をよりスムーズに変化させることができます。トランジションでは、アニメーションと補間動作が定義可能です。アニメーションとトランジションの記事で、状態アニメーションの作成について詳しく説明しています。

Animationの例では、基本的なステートのセットを宣言し、それらの間にアニメーションのトランジションを適用する方法を示しています。

ステートとQt Quick ビヘイビアを使用する」では、ビヘイビアを使用してステートの変更をアニメーション化する際の、よくある問題について説明しています。

ステートの早送り

トランジションがステートの変更を正しくアニメーションするためには、最終的に適用される前に、エンジンがステートを早送りしたり巻き戻したりする(つまり、内部的にステートを設定したり解除したりする)必要がある場合があります。そのプロセスは次のとおりです:

  1. 状態が早送りされ、終了値の完全なセットが決定される。
  2. 状態が巻き戻される。
  3. 状態がトランジションを伴って完全に適用される。

場合によっては、これが意図しない動作を引き起こすことがある。例えば、ビューのモデルやローダーのsourceComponentを変更するステートは、これらのプロパティを複数回設定します(適用、巻き戻し、再適用)。

ステートの早送りは実装の詳細と考えるべきで、後のバージョンで変更される可能性があります。

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