Моя проблема заключается в следующем: мне нужно создать класс, содержащий экземпляр QStateMachine. Этот класс должен иметь слоты, через которые вы могли бы «спросить» конечный автомат, чтобы перейти в другое состояние. И если переход был успешным, мой класс должен излучать сигнал об этом. Как бы это реализовать? Класс должен иметь возможность испускать определенные сигналы в соответствии с определенным вызовом слота. Вот небольшой пример класса:Излучение сигналов от класса, если переход в QStateMachine прошел успешно
class MyClass : public QObject
{
Q_OBJECT
public:
explicit MyClass(QObject *parent = 0)
{
mStateMachine = new QStateMachine(this);
QState *s1 = new QState(mStateMachine);
QState *s2 = new QState(mStateMachine);
QState *s3 = new QState(mStateMachine);
s1->addTransition(); // Transition to s2
s2->addTransition(); // Transition to s3
s3->addTransition(); // Transition to s1
mStateMachine->setInitialState(s1);
mStateMachine->start();
}
signals:
toS1();
toS2();
toS3();
public slots:
slotToS1()
{
/* post event to state machine about
transition to state s1,
if transition was successful,
then emit toS1() signal. */
};
slotToS2(){ /* Similar to slotToS1 */};
slotToS3(){ /* Similar to slotToS1 */};
private:
QStateMachine *mStateMachine;
}
Я был бы очень благодарен за вашу помощь!
UPD:
Щели представляют defferent виды переходов, так что внешний класс (который будет использовать MyClass
) может «спросить» в течение некоторого переходного периода. Таким образом, событие отправки сигнала или сигнал на конечный автомат, он смотрит на событие или сигнал и (если в правильном состоянии) делает этот переход. И я хочу уведомить внешний класс с определенным сигналом, который спросил, прежде чем слот (переход) был успешно выполнен.
Это не совсем мое дело. Я хочу запускать сигналы, когда происходят переходы, но не при входе в какое-то состояние. Я обновил вопрос. –
@NazariiPlebanskii Вы также можете использовать сигнал «triggered» самого перехода, если есть несколько переходов, ведущих к состоянию. –
действительно. Это было бы супер для меня! Благодарю. –