[英]C++ Qt: Check the current State of QStateMachine
我正在嘗試在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
}
您可以將屬性分配給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 :: configuration()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;
}
當狀態機進入初始狀態時,它將發出start()信號。 您編寫的插槽將聽到並打印配置。 有關此問題的更多信息,請參閱以下Qt文檔:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.