Spec-Zone.ru › Qt 5.13

Класс QStateMachine

Класс QStateMachine предоставляет иерархическую конечный автомат. Подробнее...

Заголовок: #include <QStateMachine>
qmake: QT += core
С момента: Qt 4.6
Наследует: QState

Этот класс был представлен в Qt 4.6.

  • Список всех членов, включая унаследованные

Примечание: Все функции в этом классе являются реентерабельными.

Примечание: Эти функции также безопасны для потоков:

  • postEvent(QEvent *event, QStateMachine::EventPriority priority)
  • postDelayedEvent(QEvent *event, int delay)
  • cancelDelayedEvent(int id)

Типы публичного доступа

класс SignalEvent
класс WrappedEvent
перечисление Ошибка { НетОшибок, НетНачальногоСостоянияОшибка, НетСостоянияПоУмолчаниюВСостоянииИсторииОшибка, НетОбщегоПредкаДляПереходаОшибка }
перечисление ПриоритетСообщения { НормальныйПриоритет, ВысокийПриоритет }

Свойства

  • animated : bool
  • ошибкаСтрока : const QString
  • глобальнаяПолитикаВосстановления : QState::RestorePolicy
  • запущен : bool

Публичные функции

QStateMachine(QState::ChildMode childMode, QObject *parent = nullptr)
QStateMachine(QObject *parent = nullptr)
virtual ~QStateMachine()
void добавитьАнимациюПоУмолчанию(QAbstractAnimation *animation)
void добавитьСостояние(QAbstractState *state)
bool отменитьОтложенноеСообщения(int id)
void очиститьОшибка()
QSet<QAbstractState *> конфигурация() const
QList<QAbstractAnimation *> анимацииПоУмолчанию() const
QStateMachine::Ошибка ошибка() const
QString ошибкаСтрока() const
QState::RestorePolicy глобальнаяПолитикаВосстановления() const
bool isAnimated() const
bool запущен() const
int отложитьСообщенияНа(QEvent *event, int delay)
void отправитьСообщения(QEvent *event, QStateMachine::EventPriority priority = NormalPriority)
void удалитьАнимациюПоУмолчанию(QAbstractAnimation *animation)
void удалитьСостояние(QAbstractState *state)
void установитьАнимацию(bool enabled)
void установитьГлобальнуюПолитикуВосстановления(QState::RestorePolicy restorePolicy)

Переопределённые публичные функции

virtual bool eventFilter(QObject *watched, QEvent *event) override

Открытые слоты

void setRunning(bool running)
void start()
void stop()

Сигналы

void runningChanged(bool running)
void started()
void stopped()

Переопределённые защищённые функции

virtual bool event(QEvent *e) override
virtual void onEntry(QEvent *event) override
virtual void onExit(QEvent *event) override

Подробное описание

QStateMachine основан на концепциях и обозначениях Statecharts. QStateMachine является частью Фреймворка для управления состояниями.

Автомат состояний управляет набором состояний (классы, наследующие от QAbstractState) и переходами (потомки QAbstractTransition) между этими состояниями; эти состояния и переходы определяют граф состояний. После построения графа состояний автомат состояний может его выполнить. Алгоритм выполнения QStateMachine основан на алгоритме State Chart XML (SCXML). В обзоре фреймворка overview приведены несколько графов состояний и код для их построения.

Для добавления состояния верхнего уровня в автомат состояний используется функция addState(). Состояния удаляются с помощью функции removeState(). Не рекомендуется удалять состояния, пока машина работает.

Прежде чем машина может быть запущена, необходимо установить начальное состояние. Начальное состояние — это состояние, в которое машина переходит при запуске. Затем можно запустить машину состояний. Сигнал started() генерируется при входе в начальное состояние.

Машина работает по принципу обработки событий и имеет собственный цикл обработки событий. События публикуются в машину с помощью postEvent(). Обратите внимание, что это означает, что она работает асинхронно и не будет прогрессировать без работающего цикла обработки событий. Вам обычно не придётся публиковать события в машину напрямую, так как переходы Qt, например, QEventTransition и его подклассы, обрабатывают это. Но для пользовательских переходов, запускаемых событиями, postEvent() полезен.

Автомат состояний обрабатывает события и выполняет переходы до тех пор, пока не будет достигнуто состояние верхнего уровня, и затем автомат состояний генерирует сигнал finished(). Вы также можете остановить автомат состояний явно. В этом случае генерируется сигнал stopped().

Следующий фрагмент кода демонстрирует автомат состояний, который завершится при нажатии кнопки:

QPushButton button;

QStateMachine machine;
QState *s1 = new QState();
s1->assignProperty(&button, "text", "Click me");

QFinalState *s2 = new QFinalState();
s1->addTransition(&button, SIGNAL(clicked()), s2);

machine.addState(s1);
machine.addState(s2);
machine.setInitialState(s1);
machine.start();

Этот пример кода использует QState, который наследуется от QAbstractState. Класс QState предоставляет состояние, которое можно использовать для установки свойств и вызова методов объектов QObject при входе или выходе из состояния. Он также содержит вспомогательные функции для добавления переходов, например, QSignalTransition, как в этом примере. Дополнительные сведения см. в описании класса QState.

В случае возникновения ошибки машина будет искать состояние ошибки, и если оно доступно, то перейдет в это состояние. Типы возможных ошибок описаны в перечислении Error. После перехода в состояние ошибки тип ошибки можно получить с помощью error(). Выполнение графа состояний не прекратится при входе в состояние ошибки. Если состояние ошибки не относится к ошибочному состоянию, машина прекратит выполнение и сообщение об ошибке будет выведено в консоль.

См. также QAbstractState, QAbstractTransition, QState и Фреймворк машины состояний.

Документация по типам членов

enum QStateMachine::Error

Это перечисление типов определяет ошибки, которые могут возникнуть в машине состояний во время выполнения. Когда машина состояний сталкивается с невосстановимой ошибкой во время выполнения, она установит код ошибки, возвращаемый функцией error(), сообщение об ошибке, возвращаемое функцией errorString(), и перейдет в состояние ошибки на основе контекста ошибки.

Константа Значение Описание
QStateMachine::NoError 0 Ошибка не произошла.
QStateMachine::NoInitialStateError 1 Машина перешла в состояние QState с дочерними элементами, у которого не задано начальное состояние. Контекст этой ошибки — состояние, у которого отсутствует начальное состояние.
QStateMachine::NoDefaultStateInHistoryStateError 2 Машина перешла в состояние QHistoryState, у которого не задано состояние по умолчанию. Контекст этой ошибки — QHistoryState, у которого отсутствует состояние по умолчанию.
QStateMachine::NoCommonAncestorForTransitionError 3 Машина выбрала переход, источник и целевые объекты которого не являются частью одного дерева состояний и, следовательно, не являются частью одной машины состояний. Как правило, это может означать, что одному из состояний не задан родитель или он не добавлен ни в какую машину. Контекст этой ошибки — исходное состояние перехода.

См. также setErrorState().

enum QStateMachine::EventPriority

Это перечисление типов задаёт приоритет события, размещённого в машине состояний с помощью postEvent().

События с высоким приоритетом обрабатываются перед событиями с обычным приоритетом.

Константа Значение Описание
QStateMachine::NormalPriority 0 Событие имеет обычный приоритет.
QStateMachine::HighPriority 1 Событие имеет высокий приоритет.

Документация по свойствам

animated : bool

Это свойство указывает, включены ли анимации.

Значение свойства по умолчанию — true.

Функции доступа:

bool isAnimated() const
void setAnimated(bool enabled)

См. также QAbstractTransition::addAnimation().

errorString : const QString

Это свойство содержит строку ошибки данной машины состояний.

Функции доступа:

QString errorString() const

globalRestorePolicy : QState::RestorePolicy

Это свойство хранит политику восстановления состояний данной машины состояний.

Значение свойства по умолчанию — QState::DontRestoreProperties.

Функции доступа:

QState::RestorePolicy globalRestorePolicy() const
void setGlobalRestorePolicy(QState::RestorePolicy restorePolicy)

running : bool

Это свойство хранит состояние работы данной машины состояний.

Это свойство было введено в Qt 5.4.

Функции доступа:

bool isRunning() const
void setRunning(bool running)

Сигнал уведомления:

void runningChanged(bool running)

См. также start(), stop(), started(), stopped() и runningChanged().

Документация по функциям-членам

QStateMachine::QStateMachine(QState::ChildMode childMode, QObject *parent = nullptr)

Создаёт новую машину состояний с заданным childMode и parent.

Эта функция была введена в Qt 5.0.

QStateMachine::QStateMachine(QObject *parent = nullptr)

Создаёт новую машину состояний с заданным parent.

[signal] void QStateMachine::runningChanged(bool running)

Этот сигнал генерируется при изменении свойства running со значением running в качестве аргумента.

Эта функция была введена в Qt 5.4.

Примечание: Сигнал уведомления для свойства running.

См. также QStateMachine::running.

[slot] void QStateMachine::start()

Запускает эту машину состояний. Машина сбросит свою конфигурацию и перейдёт в начальное состояние. При входе в конечное верхнеуровневое состояние (QFinalState) машина сгенерирует сигнал finished().

Примечание: Машина состояний не будет работать без цикла событий, например, основного цикла событий приложения, запущенного с помощью QCoreApplication::exec() или QApplication::exec().

См. также started(), finished(), stop(), initialState() и setRunning().

[signal] void QStateMachine::started()

Этот сигнал генерируется, когда машина состояний переходит в своё начальное состояние (QStateMachine::initialState).

Примечание: Это частный сигнал. Он может использоваться в подключениях сигналов, но не может генерироваться пользователем.

См. также QStateMachine::finished() и QStateMachine::start().

[slot] void QStateMachine::stop()

Останавливает эту машину состояний. Машина состояний прекратит обработку событий, а затем сгенерирует сигнал stopped().

См. также stopped(), start() и setRunning().

[signal] void QStateMachine::stopped()

Этот сигнал генерируется, когда машина состояний остановлена.

Примечание: Это частный сигнал. Он может использоваться в подключениях сигналов, но не может генерироваться пользователем.

См. также QStateMachine::stop() и QStateMachine::finished().

[virtual] QStateMachine::~QStateMachine()

Уничтожает эту машину состояний.

void QStateMachine::addDefaultAnimation(QAbstractAnimation *animation)

Добавляет стандартную анимацию для рассмотрения в любом переходе.

void QStateMachine::addState(QAbstractState *state)

Добавляет заданный state в эту машину состояний. Состояние становится верхним уровнем.

Если состояние уже находится в другой машине, оно сначала будет удалено из старой машины, а затем добавлено в эту машину.

См. также removeState() и setInitialState().

bool QStateMachine::cancelDelayedEvent(int id)

Отменяет отложенное событие, идентифицируемое заданным id. id должен быть значением, возвращённым вызовом postDelayedEvent(). Возвращает true, если событие было успешно отменено, в противном случае возвращает false.

Примечание: Эта функция является потокобезопасной.

См. также postDelayedEvent().

void QStateMachine::clearError()

Очищает строку ошибки и код ошибки машины состояний.

QSet<QAbstractState *> QStateMachine::configuration() const

Возвращает максимальное согласованное множество состояний (включая параллельные и конечные состояния), в котором в настоящее время находится эта машина состояний. Если состояние s находится в конфигурации, всегда верно, что родитель s также находится в c. Однако следует учесть, что сама машина не является явным членом конфигурации.

QList<QAbstractAnimation *> QStateMachine::defaultAnimations() const

Возвращает список анимаций по умолчанию, которые будут рассматриваться для любого перехода.

QStateMachine::Error QStateMachine::error() const

Возвращает код ошибки последней ошибки, произошедшей в машине состояний.

QString QStateMachine::errorString() const

Возвращает строку ошибки последней ошибки, произошедшей в машине состояний.

Примечание: Функция-геттер для свойства errorString.

[override virtual protected] bool QStateMachine::event(QEvent *e)

Переопределяет: QState::event(QEvent *e).

[override virtual] bool QStateMachine::eventFilter(QObject *watched, QEvent *event)

Переопределяет: QObject::eventFilter(QObject *watched, QEvent *event).

QState::RestorePolicy QStateMachine::globalRestorePolicy() const

Возвращает политику восстановления машины состояний.

Примечание: Функция-геттер для свойства globalRestorePolicy.

См. также setGlobalRestorePolicy().

bool QStateMachine::isAnimated() const

Возвращает, включены ли анимации для этой машины состояний.

Примечание: Функция-геттер для свойства animated.

[override virtual protected] void QStateMachine::onEntry(QEvent *event)

Переопределяет: QState::onEntry(QEvent *event).

Эта функция вызовет start() для запуска машины состояний.

[override virtual protected] void QStateMachine::onExit(QEvent *event)

Переопределяет: QState::onExit(QEvent *event).

Эта функция вызовет stop() для остановки машины состояний и последующего излучения сигнала stopped().

int QStateMachine::postDelayedEvent(QEvent *event, int delay)

Отправляет заданное event для обработки этой машиной состояний с заданной задержкой в миллисекундах. Возвращает идентификатор, связанный с отложенным событием, или -1, если событие не могло быть отправлено.

Эта функция возвращает немедленно. Когда задержка истечёт, событие будет добавлено в очередь событий машины состояний для обработки. Машина состояний принимает владение событием и удаляет его после обработки.

Отправлять события можно только когда машина состояний работает.

Примечание: Эта функция является потокобезопасной.

См. также cancelDelayedEvent() и postEvent().

void QStateMachine::postEvent(QEvent *event, QStateMachine::EventPriority priority = NormalPriority)

Отправляет заданное event заданного priority для обработки этой машиной состояний.

Эта функция возвращает немедленно. Событие добавляется в очередь событий машины состояний. События обрабатываются в порядке отправки. Машина состояний принимает владение событием и удаляет его после обработки.

Отправлять события можно только когда машина состояний запущена или когда она запускается.

Примечание: Эта функция является потокобезопасной.

См. также postDelayedEvent().

void QStateMachine::removeDefaultAnimation(QAbstractAnimation *animation)

Удаляет animation из списка анимаций по умолчанию.

void QStateMachine::removeState(QAbstractState *state)

Удаляет заданное state из этой машины состояний. Машина состояний освобождает владение состоянием.

См. также addState().

void QStateMachine::setAnimated(bool enabled)

Устанавливает, включены ли анимации для этой машины состояний.

Примечание: Функция-сеттер для свойства animated.

См. также isAnimated().

void QStateMachine::setGlobalRestorePolicy(QState::RestorePolicy restorePolicy)

Устанавливает политику восстановления машины состояний на restorePolicy. Политика восстановления по умолчанию — QState::DontRestoreProperties.

Примечание: Функция-сеттер для свойства globalRestorePolicy.

См. также globalRestorePolicy().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qstatemachine.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API