Я реализовал шаблон состояния в qt.Внутри моей функции EnterIdleState я подключаю таймер одиночной съемки, чтобы начать работу.При первом вызове это работает нормально, со второй попытки, однако таймер не срабатывает, хотя соединение устанавливается, как и раньше:
Кодовый поток выглядит следующим образом:
SetNewState(newIdleState());
IdleState::doWork();
SetNewState(new WorkState());
WorkdState::doWork();
SetNewState(newIdleState());
SetNewStateвыглядит так:
void IridiumProcessor::SetNewState(State* pNewState)
{
if (m_pCurrentState)
{
m_pCurrentState->LeaveState();
delete m_pCurrentState;
}
m_pCurrentState = pNewState;
if (m_pCurrentState)
m_pCurrentState->EnterState();
}
При входе в IdleState я подключаю таймер одиночного выстрела:
void IdleState::EnterState()
{
QTimer::singleShot(1000,this,SLOT(OnTimeout()));
}
void IdleState::OnTimeout()
{
qDebug() << "IdleState OnTimeout";
}
То же самое происходит, когда я использую membervar QTimer вместо статического вызова singleShot.