Qt(C++)で状態マシンを実装しようとしています。 QStateMachineの現在の状態を確認するにはどうすればよいですか? ドキュメントにメソッドが見つかりませんでした。C++ Qt:QStateMachineの現在の状態を確認します。
THX
Qt(C++)で状態マシンを実装しようとしています。 QStateMachineの現在の状態を確認するにはどうすればよいですか? ドキュメントにメソッドが見つかりませんでした。C++ Qt:QStateMachineの現在の状態を確認します。
THX
あなたはQStateMachine::configuration()
を試してみましたか?
は、上記のURLからhttp://www.qtcentre.org/threads/42085-How-to-get-the-current-state-of-QStateMachine
抜粋を参照してください。
// QStateMachine::configuration() gives you the current states.
while(stateMachine->configuration().contains(s2))
{
//do something
}
ええ、私がそれを試してみたとき、私が加えた国はありませんでした。私は自分のQStateクラスを持っていません。ちょうど普通のQStatesです。 – ExpatEgghead
私のアプリケーションの一部として、アプリケーションの現在の状態を別のマシンに送信する必要があります。このためにセットを狩るのは賢明ではないようです。おそらく私の間違いは、私のすべての州の派生クラスを作成していないということでした。 – ExpatEgghead
@ExpatEgghead:問題を説明する完全なコードを最小限に抑えることができれば、より多くの関心を集めることができると思います。 – menjaraz
あなたはQStateMachine自体にプロパティを割り当てることができます。
// QState m_State1;
// QState m_State2;
// QStateMachine m_Machine;
m_State1.assignProperty(m_Label, "visible", false);
m_State1.assignProperty(&m_Machine, "state", 1);
m_State2.assignProperty(m_Label, "visible", true);
m_State2.assignProperty(&m_Machine, "state", 2);
次に、現在の状態を動的プロパティから読み取ることができます。
qDebug() << m_Machine.property("state");
QSET QStateMachine ::構成()constは
この状態マシンは、現在であること(平行状態と最終状態を含む)状態の最大一貫したセットを返し。状態sが構成内にある場合、sの親が常にcにある場合もあります。ただし、マシン自体は構成の明示的なメンバーではありません。
使用例:
bool IsInState(QStateMachine& aMachine, QAbstractState* aState) const
{
if (aMachine_.configuration().contains(aState)) return true;
return false
}
私は後半に来て実現し、うまくいけば、この答えは、この全体につまずく誰に役立ちます。
あなたは既にconfiguration()を使用しようとしましたが、そこにはあなたの状態はありませんでした。これはstart()が非同期であるためです。
したがって、start()を呼び出した直後にconfiguration()を呼び出したとすると、あなたの状態はまだ存在していません。 QStateMachineクラスのstarted()シグナルを使用して、必要な機能を取得できます。それをチェックアウト:
stateMachine->setInitialState(someState);
stateMachine->start();
connect(stateMachine, SIGNAL(started()), this, SLOT(ReceiveStateMachineStarted()));
次に、あなたのReceiveStateMachineStarted()スロットのために、あなたはこのような何か行うことができます:
void MyClass::ReceiveStateMachineStarted() {
QSet<QAbstractState*> stateSet = stateMachine->configuration();
qDebug() << stateSet;
}
をあなたの状態マシンが初期状態に入ると、それは(スタートを放出します)信号。あなたが書いたスロットにそれが聞こえて、設定が印刷されます。詳細については、次のQtドキュメントを参照してください。
私は同じ問題があります。 :: configurationが提供するQSetを反復すると、QAbstractStateが得られます。これは明確な使い方ではありません。実際の例は素晴らしいでしょう。 – ExpatEgghead
@ExpatEgghead @stackoverflow.com/questions/2533132/how-to-get-this-qt-state-machine-to-workを参照してください。 –
@ExpatEgghead:あなたはQtバージョン4.7または4.8ですか? ? – menjaraz