Spec-Zone.ru › Qt

Класс QStateMachine

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

Заголовок: #include <QStateMachine>
CMake: find_package(Qt6 COMPONENTS StateMachine REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::StateMachine)
qmake: QT += statemachine
Наследует: QState
  • Список всех членов, включая унаследованные
  • Устаревшие члены

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

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

  • postEvent()
  • postDelayedEvent()
  • cancelDelayedEvent()
  • postDelayedEvent()

Типы

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

Свойства

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

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

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 являетсяАнимированным() const
bool запущен() const
int отложитьСобытиеНаЗадержку(QEvent *event, int delay)
int отложитьСобытиеНаЗадержку(QEvent *event, std::chrono::milliseconds 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 установитьЗапущен(bool running)
void запустить()
void остановить()

Сигналы

void изменилсяЗапущен(bool running)
void запущен()
void остановлен()

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

virtual bool событие(QEvent *e) override
virtual void приВходе(QEvent *event) override
virtual void приВыходе(QEvent *event) override

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

QStateMachine базируется на понятиях и обозначениях Statecharts. QStateMachine является частью Qt State Machine Framework.

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

Используйте функцию добавитьСостояние(), чтобы добавить верхнеуровневое состояние в конечный автомат. Состояния удаляются с помощью функции удалитьСостояние(). Удаление состояний во время работы автомата не рекомендуется.

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

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

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

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

QPushButton button;

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

QFinalState *s2 = new QFinalState();
s1->addTransition(&button, &QPushButton::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 и Обзор Qt State Machine.

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

перечисление 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 Событие имеет высокий приоритет.

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

[bindable] animated : bool

Примечание: Это свойство поддерживает привязки QProperty.

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

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

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

[bindable read-only] errorString : QString

Примечание: Это свойство поддерживает привязки QProperty.

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

[bindable] globalRestorePolicy : QState::RestorePolicy

Примечание: Это свойство поддерживает привязки QProperty.

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

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

[since 5.4] 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)

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

[signal, since 5.4] void QStateMachine::runningChanged(bool running)

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

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

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

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

[slot] void QStateMachine::start()

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

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

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

[private signal] void QStateMachine::started()

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

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

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

[slot] void QStateMachine::stop()

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

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

[private signal] void QStateMachine::stopped()

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

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

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

[virtual] QStateMachine::~QStateMachine()

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

void QStateMachine::addDefaultAnimation(QAbstractAnimation *animation)

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

void QStateMachine::addState(QAbstractState *state)

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

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

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

bool QStateMachine::cancelDelayedEvent(int 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 на обработку этой машиной состояний с заданной задержкой в миллисекундах delay. Возвращает идентификатор, связанный с отложенным событием, или -1, если событие не могло быть отправлено.

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

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

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

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

[since 5.15] int QStateMachine::postDelayedEvent(QEvent *event, std::chrono::milliseconds delay)

Это перегруженная функция.

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

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

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

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

Функция была введена в Qt 5.15.

См. также 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-6.2/qstatemachine.html

Spec-Zone.ru

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