Два варианту пути и правильный возврат
От: kokaku  
Дата: 21.10.19 16:34
Оценка:
Всем привет!

Решил поиграться с QStateMachine и сразу напоролся на проблему:
Есть состояние A из которого мы можем перейти либо в B, либо в С.
Есть сигнал back() который из B или C должен вернуть А. Тут вопросов нет.
Из состояния С мы можем перейти в B. Тут с возвратом начинаются проблемы — тк правильно было бы вернуться в состояние С

Подскажите, как такое решается с помощью QStateMachine
qt statemachine
Re: Два варианту пути и правильный возврат
От: kokaku  
Дата: 21.10.19 17:28
Оценка: 3 (1)
Здравствуйте, 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();
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.