Spec-Zone.ru › Qt 6.1

Класс QStateMachine

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

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

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

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

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

Типы

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

Свойства

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

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

QStateMachine(QObject *parent = nullptr)
виртуальный ~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)

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

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

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

void установитьРаботает(bool running)
void запустить()
void остановить()

Сигналы

void изменилосьРаботает(bool running)
void запущено()
void остановлено()

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

виртуальный bool событие(QEvent *e) override
виртуальный void приВходе(QEvent *event) override
виртуальный void приВыходе(QEvent *event) override

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

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

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

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

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

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

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

END_OF_DOCUMENT_MARKER

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

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.

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

перечисление 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.

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

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

bool isAnimated() const
void setAnimated(bool enabled)

[read-only] errorString : const QString

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

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

QString errorString() const

globalRestorePolicy : QState::RestorePolicy

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Spec-Zone.ru

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