Я занимаюсь разработкой приложения для векторного рисования. У меня есть QStateMachine с 4 QStates: DefaultState, SelectionState, LineDrawingState, PolygonDrawingState. Когда пользователь нажимает соответствующую кнопку инструмента, запускается соответствующий переход и вводится состояние. Пользователь может переключаться между любым из 4 инструментов (и базовых состояний).
Здесь проблема. Мне нужно создать 3 объекта перехода для каждого отдельного состояния, чтобы конечный автомат мог переключаться из текущего состояния в любое другое состояние. Я имею в виду, я должен:
defaultState->addTransition(new SwitchModeTransition(GPM_SelectObject, selectionState) );
defaultState->addTransition(new SwitchModeTransition(GPM_DrawLine, lineDrawingState) );
defaultState->addTransition(new SwitchModeTransition(GPM_DrawPolygon, polygonDrawingState) );
...
selectionState->addTransition(new SwitchModeTransition(GPM_Default, defaultState) );
selectionState->addTransition(new SwitchModeTransition(GPM_DrawLine, lineDrawingState) );
selectionState->addTransition(new SwitchModeTransition(GPM_DrawPolygon, polygonDrawingState) );
... // and so on for every single state
Это кажется излишним. Есть ли более простой способ заставить QStateMachine переключаться между всеми 4 состояниями при срабатывании соответствующего перехода?
Задача ещё не решена.
Других решений пока нет …