Spec-Zone.ru › Qt 5.14

Класс 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
перечисление Error { NoError, NoInitialStateError, NoDefaultStateInHistoryStateError, NoCommonAncestorForTransitionError, StateMachineChildModeSetToParallelError }
перечисление EventPriority { NormalPriority, HighPriority }

Свойства

  • animated : bool
  • errorString : const QString
  • globalRestorePolicy : QState::RestorePolicy
  • running : bool

Открытые функции

QStateMachine(QObject *parent = nullptr)
виртуальный ~QStateMachine()
void addDefaultAnimation(QAbstractAnimation *animation)
void addState(QAbstractState *state)
bool cancelDelayedEvent(int id)
void clearError()
QSet<QAbstractState *> configuration() const
QList<QAbstractAnimation *> defaultAnimations() const
QStateMachine::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, QStateMachine::EventPriority priority = NormalPriority)
void removeDefaultAnimation(QAbstractAnimation *animation)
void removeState(QAbstractState *state)
void setAnimated(bool enabled)
void setGlobalRestorePolicy(QState::RestorePolicy restorePolicy)

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

виртуальный bool eventFilter(QObject *watched, QEvent *event) override

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

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

Сигналы

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

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

виртуальный bool event(QEvent *e) override
виртуальный void onEntry(QEvent *event) override
виртуальный void onExit(QEvent *event) override

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

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

Конечный автомат управляет набором состояний (классы, унаследованные от 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(). Выполнение графа состояний не остановится при переходе в состояние ошибки. Если для ошибочного состояния нет состояния ошибки, машина прекратит выполнение, и сообщение об ошибке будет выведено в консоль.

Примечание: Важно: установка ChildMode машины состояний в параллельный (ParallelStates) приводит к недопустимой машине состояний. Она может быть установлена только в (или оставаться в) ExclusiveStates.

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

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

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

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

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

См. также 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 = nullptr)

Создает новую машину состояний с заданным родительским объектом.

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

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

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

См. также 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)

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

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

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

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

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

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

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

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

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

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

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

void QStateMachine::removeDefaultAnimation(QAbstractAnimation *animation)

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

void QStateMachine::removeState(QAbstractState *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.14/qstatemachine.html

Spec-Zone.ru

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