【问题标题】:Qml Item states: previous stateQml 项目状态:以前的状态
【发布时间】:2016-01-24 14:28:43
【问题描述】:

我想声明考虑到先前状态的状态。 PropertyChanges/StateChangeScript中是否可以使用之前的状态名?

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

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

【问题讨论】:

  • 为什么不在更改前保存当前状态? property string previousState onStateChanged: previousState = state
  • 我不介意 onStateChanged,谢谢

标签: qt qml qtquick2


【解决方案1】:

在研究这个问题的过程中,我发现了另一个解决方案,它可能会让那些偶然发现这个线程的任性的谷歌人受益。

另一个陈述的答案要求您为您拥有的每个状态定义一个转换,这对于具有许多状态的大型程序来说变得不方便。

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

【讨论】:

    【解决方案2】:

    正如@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()
                }
            }
        ]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多