Класс 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