crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Конечный автомат на Qt, (Qt State Machine Framework)
Litkevich Yuriy
  опции профиля:
сообщение 31.1.2009, 18:53
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Нашел в лаборатории у тролей Qt State Machine Framework
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 10.1.2018, 22:33
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Анна @ 18.12.2017, 19:31) *
Но вот как увязать описанный в книге паттерн с классами QState и QStateMachine представить не могу.
Я про этот патерн не читал.

Один из вариантов использования QStateMachine выглядит примерно так:
Сначала описываем сам автомат (без описания полезной работы)
void MyClass::createMachine()
{

_meassureMachine = new QStateMachine(this);

// Список состояний и связь их со слотами полезной работы
QState *meassurePrepareState = new QState();
meassurePrepareState->setObjectName("_meassure_meassurePrepareState");
connect(meassurePrepareState, SIGNAL(entered()), this, SLOT(meassurePrepareStateSlot()));
_meassureMachine->addState(meassurePrepareState);

_meassureMachine->setInitialState(meassurePrepareState);

QState *measureState = new QState();
measureState->setObjectName("_meassure_measureState");
connect(measureState, SIGNAL(entered()), this, SLOT(measureRunStateSlot()));
_meassureMachine->addState(measureState);


QState *repeatState = new QState();
repeatState->setObjectName("_meassure_repeatState");
connect(repeatState, SIGNAL(entered()), this, SLOT(meassureRepeatStateSlot()));
_meassureMachine->addState(repeatState);

QState *twuErrorState = new QState();
twuErrorState->setObjectName("_meassure_twuErrorState");
connect(twuErrorState, SIGNAL(entered()), this, SLOT(meassureTwuErrorStateSlot()));
_meassureMachine->addState(twuErrorState);


// переходы между состояниями
meassurePrepareState->addTransition(_timerNext, SIGNAL(timeout()), measureState);

measureState->addTransition(measureState, SIGNAL(finished()), repeatState);
measureState->addTransition(this, SIGNAL(twuFailed()), twuErrorState);

}



Далее/ранее по коду создаём слоты которые выполняются при входе в соответствующее состояние
void MyClass::meassurePrepareStateSlot()
{
...
}


void MyClass::measureRunStateSlot()
{
...
}


void MyClass::meassureRepeatStateSlot()
{
...
}

void MyClass::meassureTwuErrorStateSlot()
{
...
}


Ну а QAction умеет посылать сигналы.

П.С.
Выдрано как попало из реального кода

Сообщение отредактировал Litkevich Yuriy - 10.1.2018, 22:39
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- Litkevich Yuriy   Конечный автомат на Qt   31.1.2009, 18:53
- - SABROG   Я не совсем понимаю предназначение. В качестве при...   31.1.2009, 21:13
- - Litkevich Yuriy   Цитата(SABROG @ 1.2.2009, 0:13) Так вот ч...   31.1.2009, 23:12
- - SABROG   Почитал в инете примеры со строками на эту тему ту...   1.2.2009, 0:04
|- - Tonal   Цитата(SABROG @ 1.2.2009, 3:04) Почитал в...   2.2.2009, 15:25
- - Litkevich Yuriy   Цитата(SABROG @ 1.2.2009, 3:04) Возможно ...   1.2.2009, 0:14
- - SABROG   Цитата(Litkevich Yuriy @ 1.2.2009, 0:14) ...   1.2.2009, 0:55
- - Antrix   Конечный автомат, это ориентированый граф, который...   1.2.2009, 16:23
|- - kwisp   Цитата(Antrix @ 1.2.2009, 16:23) У игры е...   1.2.2009, 17:11
- - Litkevich Yuriy   Цитата(kwisp @ 1.2.2009, 20:11) мне кажет...   1.2.2009, 17:19
|- - kwisp   Цитата(Litkevich Yuriy @ 1.2.2009, 17:19)...   1.2.2009, 17:28
- - Antrix   Возможно пример неудачен, ну я старался объснить к...   1.2.2009, 17:33
- - Litkevich Yuriy   вообще любой пример не удачен, если все состояния ...   1.2.2009, 18:04
- - kwisp   Litkevich Yuriy, Цитатавообще любой пример не уда...   1.2.2009, 18:11
- - Litkevich Yuriy   Цитата(kwisp @ 1.2.2009, 21:11) а пример ...   1.2.2009, 18:18
- - SABROG   Видимо if'ы обеспечивают как раз тот механизм ...   2.2.2009, 15:45
- - Litkevich Yuriy   вообще чаще используют переключатель: примерно так...   2.2.2009, 15:58
- - kuzulis   ООО!!! Хоть тема и старая, но подниму....   20.4.2010, 19:56
- - Анна   Вот сейчас читаю про паттерн "Состояние...   18.12.2017, 17:31
- - Litkevich Yuriy   Цитата(Анна @ 18.12.2017, 19:31) Но вот к...   10.1.2018, 22:33


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.4.2024, 16:29