Qt 如何检测被忽略/拒绝的已发布QEvent到QStateMachine

Qt 如何检测被忽略/拒绝的已发布QEvent到QStateMachine,qt,qstatemachine,Qt,Qstatemachine,我需要查看是否接受了向状态机发布的自定义事件。我的方法是将QStateMachine子类化。请参见“事件、过渡和防护”一节 我想知道下面的代码中是否有我遗漏的东西。是否有其他/更好的方法 这里基本上与Qt文档相同: bool MyStateTransition::eventTest(QEvent *e) { if (e->type() != QEvent::Type(QEvent::User+1)) // MyEvent return false; MyE

我需要查看是否接受了向状态机发布的自定义事件。我的方法是将QStateMachine子类化。请参见“事件、过渡和防护”一节

我想知道下面的代码中是否有我遗漏的东西。是否有其他/更好的方法

这里基本上与Qt文档相同:

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;
}
bool mystatetransformation::eventTest(QEvent*e)
{
如果(e->type()!=QEvent::type(QEvent::User+1))//MyEvent
返回false;
MyEvent*se=静态铸型(e);
如果(m_值!=se->value)
{
se->setRejected(真);
返回false;
}
qDebug()已拒绝()
发射事件被拒绝(se);
其他的
//实际上不需要,因为我们可以使用触发器(),它将在
发射信号(se);
}

好的,最后回答我自己的问题:它可以工作,但基本上是一个黑客,因为没有正式的文档记录。

这是什么
MyStateMachine::endSelectTransitions
方法?当状态机“跳过”所有目标转换时调用的虚拟方法(QStateMachine的一部分)我在文件里看不到。你能发一些链接到它吗?是的,你是对的!文件里没有。但谷歌很快给出了这样的结论:
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); 

}