Qml项目状态:以前的状态

时间:2016-01-24 14:28:43

标签: qml qtquick2

我想声明考虑到以前状态的州。是否可以在PropertyChanges / StateChangeScript

中使用以前的州名称
Item {
    states: [ 
        State {
            name: "s1" 

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

2 个答案:

答案 0 :(得分:1)

在研究这个问题时,我发现了另一个解决方案,可能会让那些任性的Google员工在这个问题上磕磕绊绊。

另一个陈述的答案要求您为每个州都定义一个过渡,这对于具有多个州的大型程序来说变得不方便。

此外,至少目前在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在第一次转换后是正确的,而不是第二次转换。

答案 1 :(得分:0)

正如@folibis建议的那样,您可以使用属性来保存以前的状态。还有另一种方法可以使用ScriptAction

for (int i = 0; i < fList.size(); i++) {
  if (fList.get(i).containsKey(fileName)) {
     fnameWithCount =   getMap(fList,fileName);
  }
}