Spec-Zone.ru › Qt 5.9

Класс QStateMachine

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

Заголовок: #include <QStateMachine>
qmake: QT += core
С момента: Qt 4.6
Наследует: QState
  • Список всех членов, включая унаследованные

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

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

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

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

класс SignalEvent
класс WrappedEvent
перечисление Error { NoError, NoInitialStateError, NoDefaultStateInHistoryStateError, NoCommonAncestorForTransitionError }
перечисление EventPriority { NormalPriority, HighPriority }

Свойства

  • animated : bool
  • errorString : const QString
  • globalRestorePolicy : QState::RestorePolicy
  • running : bool
  • 3 свойства унаследованы от QState
  • 1 свойство унаследовано от QAbstractState
  • 1 свойство унаследовано от QObject

Функции публичного доступа

QStateMachine(QObject *parent = Q_NULLPTR)
QStateMachine(QState::ChildMode childMode, QObject *parent = Q_NULLPTR)
~QStateMachine()
void addDefaultAnimation(QAbstractAnimation *animation)
void addState(QAbstractState *state)
bool cancelDelayedEvent(int id)
void clearError()
QSet<QAbstractState *> configuration() const
QList<QAbstractAnimation *> defaultAnimations() const
Error error() const
QString errorString() const
QState::RestorePolicy globalRestorePolicy() const
bool isAnimated() const
bool isRunning() const
int postDelayedEvent(QEvent *event, int delay)
void postEvent(QEvent *event, EventPriority priority = NormalPriority)
void removeDefaultAnimation(QAbstractAnimation *animation)
void removeState(QAbstractState *state)
void setAnimated(bool enabled)
void setGlobalRestorePolicy(QState::RestorePolicy restorePolicy)

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

virtual bool eventFilter(QObject *watched, QEvent *event)
  • 13 функции публичного доступа унаследованы от QState
  • 3 функции публичного доступа унаследованы от QAbstractState
  • 32 функции публичного доступа унаследованы от QObject

Свойства публичного доступа

void setRunning(bool running)
void start()
void stop()
  • 1 свойство публичного доступа унаследовано от QObject

Сигналы

void runningChanged(bool running)
void started()
void stopped()
  • 5 сигналов унаследовано от QState
  • 3 сигнала унаследовано от QAbstractState
  • 2 сигнала унаследовано от QObject

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

virtual bool event(QEvent *e)
virtual void onEntry(QEvent *event)
virtual void onExit(QEvent *event)
  • 3 защищённые функции унаследованы от QState
  • 3 защищённые функции унаследованы от QAbstractState
  • 9 защищённые функции унаследованы от QObject

Дополнительные унаследованные члены

  • 11 статических публичных членов унаследованы от QObject
  • 3 защищённые функции унаследованы от QState
  • 3 защищённые функции унаследованы от QAbstractState
  • 9 защищённые функции унаследованы от QObject

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

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

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

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

Используйте функцию 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 и Фреймворк машины состояний.

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

перечисление QStateMachine::Error

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

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

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

перечисление 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(QObject *parent = Q_NULLPTR)

Конструирует новую машину состояний с заданным parent.

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

Конструирует новую машину состояний с заданным childMode и parent.

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

QStateMachine::~QStateMachine()

Удаляет эту машину состояний.

void QStateMachine::addDefaultAnimation(QAbstractAnimation *animation)

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

void QStateMachine::addState(QAbstractState *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

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

Error QStateMachine::error() const

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

QString QStateMachine::errorString() const

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

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

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

Переопределено из QObject::event().

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

Переопределено из QObject::eventFilter().

QState::RestorePolicy QStateMachine::globalRestorePolicy() const

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

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

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

bool QStateMachine::isAnimated() const

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

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

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

Переопределено из QAbstractState::onEntry().

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

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

Переопределено из QAbstractState::onExit().

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

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

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

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

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

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

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

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

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

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

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

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

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

void QStateMachine::removeDefaultAnimation(QAbstractAnimation *animation)

Удаляет animation из списка стандартных анимаций.

void QStateMachine::removeState(QAbstractState *state)

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

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

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

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

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

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

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

void QStateMachine::setAnimated(bool enabled)

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

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

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

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

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

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

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

[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().

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

Spec-Zone.ru

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