Spec-Zone.ru › Qt 5.11

Класс QStateMachine

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

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

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

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

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

Открытые типы

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

Свойства

  • animated : bool
  • errorString : const QString
  • глобальнаяПолитикаВосстановления : QState::RestorePolicy
  • running : bool
  • 3 свойства унаследованы от QState
  • 1 свойство унаследовано от QAbstractState
  • 1 свойство унаследовано от QObject

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

QStateMachine(QObject *parent = nullptr)
QStateMachine(QState::ChildMode childMode, QObject *parent = nullptr)
virtual ~QStateMachine()
void добавитьАнимациюПоУмолчанию(QAbstractAnimation *animation)
void добавитьСостояние(QAbstractState *state)
bool отменитьЗапланированноеСобытие(int id)
void очиститьОшибка()
QSet<QAbstractState *> конфигурация() const
QList<QAbstractAnimation *> анимацииПоУмолчанию() const
QStateMachine::Error ошибка() const
QString строкаОшибки() const
QState::RestorePolicy глобальнаяПолитикаВосстановления() const
bool являетсяАнимированным() const
bool запущен() const
int запланироватьСобытиеЧерезВремя(QEvent *event, int 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
  • 13 открытых функций унаследовано от QState
  • 3 открытых функции унаследовано от QAbstractState
  • 32 открытых функции унаследовано от QObject

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

void установитьЗапуск(bool running)
void запустить()
void остановить()
  • 1 открытый слот унаследован от QObject

Сигналы

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

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

virtual bool обработатьСобытие(QEvent *e) override
virtual void приВходе(QEvent *event) override
virtual void приВыходе(QEvent *event) override
  • 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 = nullptr)

Создаёт новый автомат состояний с заданным parent.

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

Создаёт новый автомат состояний с заданным childMode и parent.

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

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

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

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

QState::RestorePolicy QStateMachine::globalRestorePolicy() const

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

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

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

bool QStateMachine::isAnimated() const

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

void QStateMachine::setAnimated(bool enabled)

Устанавливает, включены ли анимации 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/archives/qt-5.11/qstatemachine.html

Spec-Zone.ru

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