我正在尝试在Qt(C ++)中实现状态机。
如何检查QStateMachine的当前状态?
我在文档中找不到相应的方法。
谢谢
你尝试过QStateMachine::configuration()
吗?
参考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 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");
来自Qt 5.7文档
QSet QStateMachine::configuration() const
返回当前状态机所处的最大一致状态集(包括并行和终止状态)。如果状态s在配置中,则其父状态也始终在其中。但是请注意,状态机本身不是配置的显式成员。
示例用法:
bool IsInState(QStateMachine& aMachine, QAbstractState* aState) const
{
if (aMachine_.configuration().contains(aState)) return true;
return false
}
stateMachine->setInitialState(someState);
stateMachine->start();
connect(stateMachine, SIGNAL(started()), this, SLOT(ReceiveStateMachineStarted()));
接着,对于您的ReceiveStateMachineStarted()槽函数,您可以这样做:
void MyClass::ReceiveStateMachineStarted() {
QSet<QAbstractState*> stateSet = stateMachine->configuration();
qDebug() << stateSet;
}