2016-03-28 3 views
4

私はC++クラスを持っており、QMLで作成できるようにしました。次に、このオブジェクトを表す引数を持つQMLの信号があります。私はQtQml.StateMachineを使用しており、私はSignalTransitionでトリガーされた信号を捕まえています。 SignalTransitionがトリガーしたときに、私のシグナル引数を次の状態に設定できるようにしたい。SignalTransition中にQML StateMachineでシグナルの引数を使用する方法

これは私の信号はModel.qmlでどのように見えるかです::コードでState.qmlで

signal mySignal(CustomObject customObject) 

マイシグナル移行コード:

import QtQml.StateMachine 1.0 as SM 

// SM.State { ... 

Model { 
    id: model 
    // ... 
} 

SM.SignalTransition { 
    targetState: nextState 
    signal: model.mySignal 
    onTriggered: console.log(customObject) // error here 
} 

// ... } 

私は次のエラーを取得する:ReferenceError: customObject is not defined。 私は信号を放射していますが、信号の引数としてcustomObjectを渡します。

答えて

1

一つのアプローチは、そうよう、mySignalハンドラは即決あまり柔軟SignalTransitionによってアクセスすることができるプロパティを設定していることであろう:試験

Model { 
    id: model 
    property CustomObject currentObj 
    onMySignal: currentObj = customObject 
} 

SM.SignalTransition { 
    targetState: nextState 
    signal: model.currentObjChanged 
    onTriggered: console.log(model.currentObj) 
} 

がハックとしないが、この場合のために許容されるかもしれません。

+0

あなたの答えをありがとう。はい、これは私が今やっているところです。それは完璧に機能しますが、あなたが言ったように、ちょっとハッキリしていて、より良い解決策があるのだろうかと思っていました。この例では:http://doc.qt.io/qt-5/qml-qtqml-statemachine-signaltransition.html#guard-propそれは私の質問に書いたようにどのように仕事をするべきですか、私はまだエラー。 – Silex

+0

そうですね、わかりません。私はあなたの質問を作業するコードのために、トリガーされた信号は何とかそれはapparantlyではない発信者の信号から引数を運ぶだろうと思う? –

0

これはちょっとしたハックですが、guardに信号のパラメータが渡されます。 guardは、それが真であるかどうかを調べるための式ですが、そうであれば移行が適用されますが、そこに余分なコードを実行するのを止めることはありません。だから:

State { 
    targetState: nextState 
    signal: model.mySignal 
    guard: { 
     // here, customObject is available, because it was an arg to the signal 
     // so, stash it away somewhere where you can get at it later 
     root.currentCustomObject = customObject; 
     // and explicitly return true, so that this guard passes OK and 
     // then the transition actually happens 
     return true; 
    } 
} 
関連する問題