Здравствуйте, kokaku, Вы писали:
K>Всем привет!
K>Решил поиграться с QStateMachine и сразу напоролся на проблему:
K>Есть состояние A из которого мы можем перейти либо в B, либо в С.
K>Есть сигнал back() который из B или C должен вернуть А. Тут вопросов нет.
K>Из состояния С мы можем перейти в B. Тут с возвратом начинаются проблемы — тк правильно было бы вернуться в состояние С
K>Подскажите, как такое решается с помощью QStateMachine
Все! Сам раскурил: QHistoryState поможет
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow) {
ui->setupUi(this);
auto sm = new QStateMachine{this};
auto s1 = new QState{sm};
auto s11 = new QState{s1};
s11->assignProperty(ui->label, "text", "A");
auto s12 = new QState{s1};
s12->assignProperty(ui->label, "text", "C");
auto s2 = new QState{sm};
s2->assignProperty(ui->label, "text", "D");
auto h = new QHistoryState(s1);
s1->setInitialState(s11);
s11->addTransition(ui->pushButton1, SIGNAL(clicked()), s2);
s11->addTransition(ui->pushButton2, SIGNAL(clicked()), s12);
s12->addTransition(ui->pushButton2, SIGNAL(clicked()), s2);
s12->addTransition(ui->pushButton3, SIGNAL(clicked()), s11);
s2->addTransition(ui->pushButton3, SIGNAL(clicked()), h);
sm->setInitialState(s1);
sm->start();
}