2016-01-24 2 views
2

Я хочу объявить состояния, которые учитывают предыдущее состояние. Можно ли использовать предыдущее состояние в PropertyChanges/StateChangeScript?Qml Состояние товара: предыдущее состояние

Item { 
    states: [ 
     State { 
      name: "s1" 

      StateChangeScript { 
       if (previous_state == "s2") 
        doSomething(); 
       else 
        doSomethingElse(); 
      } 
     }, 
     State { 
      name: "s2" 
     }, 
     State { 
      name: "s3" 
     } 
    ] 
} 
+2

Почему бы не просто сохранить текущее состояние перед изменением? 'свойство string previousState onStateChanged: previousState = state' – folibis

+0

Я не возражаю против onStateChanged, спасибо – morte

ответ

0

Как было предложено @folibis, вы можете использовать свойство для сохранения предыдущего состояния. Там же еще один способ сделать это с помощью ScriptAction:

Item { 
    states: [ 
     State { 
      name: "s1" 
     }, 
     State { 
      name: "s2" 
     }, 
     State { 
      name: "s3" 
     } 
    ] 

    transitions: [ 
     Transition { 
      from: "s2"; to: "s1" 

      ScriptAction { 
       script: doSomething() 
      } 
     }, 
     Transition { 
      from: "s3"; to: "s1" 

      ScriptAction { 
       script: doSomethingElse() 
      } 
     } 
    ] 
} 
1

В исследовании этой проблемы, я нашел другое решение, которое может принести пользу своенравного Googler наткнуться на эту тему.

В другом заявленном ответе вам необходимо определить переход для каждого состояния, которое у вас есть, что становится неудобным для более крупных программ со многими состояниями.

Кроме того, по крайней мере, в настоящее время в QML,

onStateChanged: previousState = state 

приводит к previousState держащего текущему состояния, а не предыдущий.

так, мое решение:

//within main: 
property string previous_state: "" 
property string current_state: "default_state" 

Transition{ 
    PropertyAction {target: main; property: "previous_state"; value: main.current_state} 
    PropertyAction {target: main; property: "current_state"; value: main.state} 
} 

previous_state будет всегда держать предыдущее состояние, и не требует от вас, чтобы определить новый переход для каждого состояния у вас есть.

Единственное предостережение: вы должны установить current_state в любое состояние по умолчанию, поэтому previous_state верен после первого, а не второго перехода.

Смежные вопросы