1

ステート マシンに投稿されたカスタム イベントが受け入れられたかどうかを確認する必要があります。私のアプローチは、QStateMachine をサブクラス化することです。http://doc.qt.nokia.com/latest/statemachine-api.htmlセクションのイベント、遷移、およびガードを参照してください。

以下のコードで見逃したものはないのではないかと思っています。別の/より良いアプローチはありませんか?

基本的には、Qt Doc と同じです。

bool MyStateTransition::eventTest(QEvent *e)
{
    if (e->type() != QEvent::Type(QEvent::User+1)) // MyEvent
        return false;

    MyEvent *se = static_cast<MyEvent*>(e);

    if(m_value != se->value)
    {
        se->setRejected(true);
        return false;
    }
    qDebug() << "MyStateTransition::eventTest() - Transition " << m_value << " accepting event " << se->value;
    se->setRejected(false);
    return true;
}

そして、拒否を検出するために私が見つけることができる最も簡単な方法はこれです:

void MyStateMachine::endSelectTransitions(QEvent *event)
{
    if (event->type() != QEvent::Type(QEvent::User+1)) return;

    MyEvent *se = static_cast<MyEvent*>(event);
    if(se->rejected())
        emit eventRejected(se);
    else 
        //Not really needed since we can use triggered() which will fire after
        emit eventAccepted(se); 

}
4

1 に答える 1

0

わかりました、最後に私自身の質問に答えます: 動作しますが、公式に文書化されていないため、基本的にはハックです。

于 2011-03-11T13:04:28.607 に答える