2017-08-23 4 views
0

特定の状態が終了したときに、いくつかのプロパティを変更したり、スクリプトを実行したりしたい。状態を交換するときに何かをする

正式には、以前の状態を保存するために変数を使用します。状態が変化すると、前の状態をチェックし、スクリプトを実行するかどうかを決定する。しかし、状態の数が増えるにつれて、コードはより冗長になります。どうすればそれを簡略化できますか?

次のコードを単純化するには?

Item { 
    property var work 
    property var preState 
    states: [ 
     State { 
      name: "state1"; 
      ... 
     }, 
     State { 
      name: "state2"; 
      ... 
     } 
     ... 
     State { 
      name: "stateN"; 
      ... 
     } 
    ] 
    onStateChanged: { 
     if (preState == "state1") { 
      ... 
     } else if (preState == "state2") { 
      ... 
     } else if (preState == "stateN") { 
      ... 
     } 
    } 
    ... 
} 

答えて

0

あなたは、可能な限り、宣言としてそれを使用したい場合は、状態の変化にスクリプトを使用しないようになること

Item { 
    id:stateTest 
    property var work 
    property var prevState 
    states: [ 
     State { 
      name: "state1"; 

     }, 
     State { 
      name: "state2"; 

     }, 

     State { 
      name: "stateN"; 

     } 
    ] 

    onStateChanged: { 

     work="whatever" 

     prevState=state 
    } 

    Component.onCompleted: prevState=state 
} 
1

ためonStateChanged信号を使用することができます。代わりに、あなたが宣言的に状態を述べると、新しいStateが入力されたときに何が変わるでしょう。

これには、PropertyChanges要素のリストを入力できます。

anchorsと親parentを特化してChangesに変更することもできます。スクリプトを実行する必要がある場合、正しい方法はStateChangeScript要素を使用することです。

変更をアニメーション化するには、Transitionを追加します。あなたはState

の使用構文に関する詳細な情報を見つけることができます

Hereは非常に簡単です:

State { 
    name: 'myState1' 
    PropertyChanges { target: root; color: 'green' } 
    AnchorChanges { target: child; anchors.top: root.bottom } 
    // ... some more if necessary ... 
} 

Changesを使用しての良いところは、結果が自動的に結合されていること、ですあなたがスクリプトでそれを設定するのであれば、それはどんなものになるのでしょうか? (なし、Qt.binding(...)

関連する問題