Класс QScxmlStateMachine
Класс QScxmlStateMachine предоставляет интерфейс к конечным автоматам, созданным из файлов SCXML. Подробнее...
| Заголовок: | #include <QScxmlStateMachine> |
| qmake: | QT += scxml |
| С момента: | Qt 5.7 |
| Инициализируется из: | ScxmlStateMachine |
| Наследует: | QObject |
Свойства
|
|
- 1 свойство унаследовано от QObject
Общедоступные функции
| QStringList | activeStateNames(bool compress = true) const |
| void | cancelDelayedEvent(const QString &sendId) |
| QMetaObject::Connection | connectToEvent(const QString &scxmlEventSpec, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection) |
| QMetaObject::Connection | connectToEvent(const QString &scxmlEventSpec, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection) |
| QMetaObject::Connection | connectToEvent(const QString &scxmlEventSpec, Functor functor, Qt::ConnectionType type = Qt::AutoConnection) |
| QMetaObject::Connection | connectToEvent(const QString &scxmlEventSpec, const QObject *context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection) |
| QMetaObject::Connection | connectToState(const QString &scxmlStateName, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection) |
| QMetaObject::Connection | connectToState(const QString &scxmlStateName, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection) |
| QMetaObject::Connection | connectToState(const QString &scxmlStateName, Functor functor, Qt::ConnectionType type = Qt::AutoConnection) |
| QMetaObject::Connection | connectToState(const QString &scxmlStateName, const QObject *context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection) |
| QScxmlDataModel * | dataModel() const |
| QVariantMap | initialValues() |
| QVector<QScxmlInvokableService *> | invokedServices() const |
| bool | isActive(const QString &scxmlStateName) const |
| bool | isDispatchableTarget(const QString &target) const |
| bool | isInitialized() const |
| bool | isInvoked() const |
| bool | isRunning() const |
| QScxmlCompiler::Loader * | loader() const |
| QString | name() const |
| QVector<QScxmlError> | parseErrors() const |
| QString | sessionId() const |
| void | setDataModel(QScxmlDataModel *model) |
| void | setInitialValues(const QVariantMap &initialValues) |
| void | setLoader(QScxmlCompiler::Loader *loader) |
| void | setRunning(bool running) |
| void | setTableData(QScxmlTableData *tableData) |
| QStringList | stateNames(bool compress = true) const |
| void | submitEvent(QScxmlEvent *event) |
| void | submitEvent(const QString &eventName) |
| void | submitEvent(const QString &eventName, const QVariant &data) |
| QScxmlTableData * | tableData() const |
- 32 общедоступных функций, унаследованных от QObject
Общедоступные слоты
| bool | init() |
| void | start() |
| void | stop() |
- 1 общедоступный слот, унаследованный от QObject
Сигналы
| void | dataModelChanged(QScxmlDataModel *model) |
| void | finished() |
| void | initialValuesChanged(const QVariantMap &initialValues) |
| void | initializedChanged(bool initialized) |
| void | invokedServicesChanged(const QVector<QScxmlInvokableService *> &invokedServices) |
| void | loaderChanged(QScxmlCompiler::Loader *loader) |
| void | log(const QString &label, const QString &msg) |
| void | reachedStableState() |
| void | runningChanged(bool running) |
| void | tableDataChanged(QScxmlTableData *tableData) |
- 2 сигнала унаследованы от QObject
Статические публичные члены
| QScxmlStateMachine * | fromData(QIODevice *data, const QString &fileName = QString()) |
| QScxmlStateMachine * | fromFile(const QString &fileName) |
| std::function<void( bool ) > | onEntry(const QObject *receiver, const char *method) |
| std::function<void( bool ) > | onEntry(Functor functor) |
| std::function<void( bool ) > | onEntry(const QObject *receiver, PointerToMemberFunction method) |
| std::function<void( bool ) > | onExit(const QObject *receiver, const char *method) |
| std::function<void( bool ) > | onExit(Functor functor) |
| std::function<void( bool ) > | onExit(const QObject *receiver, PointerToMemberFunction method) |
- 11 статических публичных членов унаследовано от QObject
Защищенные функции
| QScxmlStateMachine(const QMetaObject *metaObject, QObject *parent = nullptr) | |
| QScxmlStateMachine(QScxmlStateMachinePrivate &dd, QObject *parent = nullptr) | |
| bool | isActive(int stateIndex) const |
- 9 защищенных функций унаследовано от QObject
Подробное описание
Класс QScxmlStateMachine предоставляет интерфейс к автоматам состояний, созданным из файлов SCXML.
QScxmlStateMachine — это реализация State Chart XML (SCXML).
Все состояния, определённые в файле SCXML, доступны как свойства QScxmlStateMachine. Эти свойства — булевы значения и указывают, активно или неактивно состояние.
Примечание: QScxmlStateMachine нуждается в QEventLoop для корректной работы. В цикле событий используется атрибут delay для событий и для планирования обработки автомата состояний при получении событий от вложенных (или родительских) автоматов состояний.
Документация по свойствам
dataModel : QScxmlDataModel *
Это свойство содержит модель данных, которая должна использоваться для этой машины состояний.
SCXML модели данных описаны в Спецификация SCXML - 5 Модель данных и манипуляции с данными. Более подробная информация о поддерживаемых моделях данных доступна в Соответствии SCXML.
Изменение модели данных, когда машина состояний initialized уже запущена, не указано в стандарте SCXML и приводит к неопределенному поведению.
Функции доступа:
| QScxmlDataModel * | dataModel() const |
| void | setDataModel(QScxmlDataModel *model) |
Сигнал уведомления:
| void | dataModelChanged(QScxmlDataModel *model) |
См. также QScxmlDataModel, QScxmlNullDataModel, QScxmlEcmaScriptDataModel и QScxmlCppDataModel.
initialValues : QVariantMap
Это свойство содержит начальные значения, которые должны использоваться для настройки модели данных.
Функции доступа:
| QVariantMap | initialValues() |
| void | setInitialValues(const QVariantMap &initialValues) |
Сигнал уведомления:
| void | initialValuesChanged(const QVariantMap &initialValues) |
См. также QScxmlStateMachine::init() и QScxmlDataModel.
initialized : const bool
Это свойство содержит значение, указывающее, была ли инициализирована машина состояний.
Это true если машина состояний была инициализирована, false в противном случае.
Функции доступа:
| bool | isInitialized() const |
Сигнал уведомления:
| void | initializedChanged(bool initialized) |
См. также QScxmlStateMachine::init() и QScxmlDataModel.
invoked : const bool
Это свойство содержит значение, указывающее, была ли машина состояний вызвана из внешней машины состояний.
true когда машина состояний была запущена как служба с элементом <invoke>, false в противном случае.
Функции доступа:
| bool | isInvoked() const |
invokedServices : QVector<QScxmlInvokableService *> const
Это свойство содержит список SCXML служб, которые были вызваны из основной машины состояний (возможно, рекурсивно).
Функции доступа:
| QVector<QScxmlInvokableService *> | invokedServices() const |
Сигнал уведомления:
| void | invokedServicesChanged(const QVector<QScxmlInvokableService *> &invokedServices) |
loader : QScxmlCompiler::Loader *
Это свойство содержит загрузчик, который в настоящее время используется для разрешения и загрузки URI для машины состояний.
Функции доступа:
| QScxmlCompiler::Loader * | loader() const |
| void | setLoader(QScxmlCompiler::Loader *loader) |
Сигнал уведомления:
| void | loaderChanged(QScxmlCompiler::Loader *loader) |
name : const QString
Это свойство содержит имя машины состояний, заданное атрибутом name тега <scxml>.
Функции доступа:
| QString | name() const |
parseErrors : const QVector<QScxmlError>
Это свойство содержит список ошибок разбора, возникших во время создания машины состояний из файла SCXML.
Функции доступа:
| QVector<QScxmlError> | parseErrors() const |
running : bool
Это свойство содержит состояние выполнения данной машины состояний.
Функции доступа:
| bool | isRunning() const |
| void | setRunning(bool running) |
Сигнал уведомления:
| void | runningChanged(bool running) |
См. также start().
sessionId : const QString
Это свойство содержит идентификатор сеанса текущей машины состояний.
Идентификатор сеанса используется для маршрутизации сообщений между родительской и дочерней машинами состояний. Если машина состояний запущена элементом <invoke>, все отправляемые ею события будут иметь поле invokeid , установленное в значение идентификатора сеанса. Машина состояний будет использовать источник события (установленный атрибутом target или targetexpr в элементе <send>) для отправки сообщений в соответствующую дочернюю машину состояний.
Функции доступа:
| QString | sessionId() const |
См. также QScxmlEvent::invokeId().
tableData : QScxmlTableData *
Это свойство содержит данные таблицы, используемые при генерации кода C++ из файла SCXML.
Класс, реализующий машину состояний, будет использовать это свойство для присвоения сгенерированных данных таблицы. Машина состояний не берет на себя ответственность за данные таблицы.
Функции доступа:
| QScxmlTableData * | tableData() const |
| void | setTableData(QScxmlTableData *tableData) |
Сигнал уведомления:
| void | tableDataChanged(QScxmlTableData *tableData) |
Документация по членам-функциям
[protected] QScxmlStateMachine::QScxmlStateMachine(const QMetaObject *metaObject, QObject *parent = nullptr)
Инициализирует экземпляр QScxmlStateMachine.
[protected] QScxmlStateMachine::QScxmlStateMachine(QScxmlStateMachinePrivate &dd, QObject *parent = nullptr)
Конструктор копирования.
QStringList QScxmlStateMachine::activeStateNames(bool compress = true) const
Возвращает список имен состояний всех активных состояний.
Когда состояние активное, все его родительские состояния также активны по определению. Если compress true (по умолчанию), родительские состояния будут отфильтрованы, и будут возвращены только листовые состояния. Если compress false, будет возвращён полный список активных состояний.
void QScxmlStateMachine::cancelDelayedEvent(const QString &sendId)
Отменяет отложенное событие со значением sendId.
QMetaObject::Connection QScxmlStateMachine::connectToEvent(const QString &scxmlEventSpec, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
Создаёт соединение указанного типа type от события, определённого scxmlEventSpec, к методу method объекта receiver. Метод method объекта receiver может принимать QScxmlEvent в качестве параметра. Например:
void mySlot(const QScxmlEvent &event);
В отличие от спецификаций событий в SCXML-документах, пробелы в scxmlEventSpec здесь недопустимы. Для подключения к нескольким событиям с разными префиксами необходимо вызывать connectToEvent() несколько раз.
Возвращает дескриптор соединения, который можно использовать для последующего разъединения.
QMetaObject::Connection QScxmlStateMachine::connectToEvent(const QString &scxmlEventSpec, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection)
Создаёт соединение заданного типа type от события, заданного scxmlEventSpec, к методу method в объекте receiver.
Метод method объекта receiver должен принимать QScxmlEvent в качестве параметра.
В отличие от спецификаций событий в SCXML-документах, пробелы в scxmlEventSpec здесь недопустимы. Для подключения к нескольким событиям с разными префиксами, необходимо вызвать connectToEvent() несколько раз.
Возвращает дескриптор соединения, который можно использовать для последующего разъединения.
QMetaObject::Connection QScxmlStateMachine::connectToEvent(const QString &scxmlEventSpec, Functor functor, Qt::ConnectionType type = Qt::AutoConnection)
Создаёт соединение заданного типа type от события, заданного scxmlEventSpec, к functor.
Functor должен принимать QScxmlEvent в качестве параметра.
В отличие от спецификаций событий в SCXML-документах, пробелы в scxmlEventSpec здесь недопустимы. Для подключения к нескольким событиям с разными префиксами, необходимо вызвать connectToEvent() несколько раз.
Возвращает дескриптор соединения, который можно использовать для последующего разъединения.
QMetaObject::Connection QScxmlStateMachine::connectToEvent(const QString &scxmlEventSpec, const QObject *context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection)
Создаёт соединение заданного типа type от события, заданного scxmlEventSpec, к functor, используя context в качестве контекста.
Functor должен принимать QScxmlEvent в качестве параметра.
В отличие от спецификаций событий в SCXML-документах, пробелы в scxmlEventSpec здесь недопустимы. Для подключения к нескольким событиям с разными префиксами, необходимо вызвать connectToEvent() несколько раз.
Возвращает дескриптор соединения, который можно использовать для последующего разъединения.
QMetaObject::Connection QScxmlStateMachine::connectToState(const QString &scxmlStateName, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
Создаёт соединение заданного типа type от состояния, определённого scxmlStateName, к методу method в объекте receiver. Метод method объекта receiver может принимать булевый аргумент, указывающий, стало ли подключенное состояние активным или неактивным. Например:
void mySlot(bool active);
Возвращает дескриптор соединения, который можно использовать для последующего разъединения.
QMetaObject::Connection QScxmlStateMachine::connectToState(const QString &scxmlStateName, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection)
Создаёт соединение заданного типа type от состояния, заданного scxmlStateName, к методу method в объекте receiver.
Метод method объекта receiver должен принимать булевый аргумент, указывающий, стало ли подключенное состояние активным или неактивным.
Возвращает дескриптор соединения, который можно использовать для последующего разъединения.
QMetaObject::Connection QScxmlStateMachine::connectToState(const QString &scxmlStateName, Functor functor, Qt::ConnectionType type = Qt::AutoConnection)
Создаёт соединение заданного типа type от состояния, заданного scxmlStateName, к functor.
Functor должен принимать булевый аргумент, указывающий, стало ли подключенное состояние активным или неактивным.
Возвращает дескриптор соединения, который можно использовать для последующего разъединения.
QMetaObject::Connection QScxmlStateMachine::connectToState(const QString &scxmlStateName, const QObject *context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection)
Создаёт соединение заданного типа type от состояния, заданного scxmlStateName, к functor, используя context в качестве контекста.
Functor должен принимать булевый аргумент, указывающий, стало ли подключенное состояние активным или неактивным.
Возвращает дескриптор соединения, который можно использовать для последующего разъединения.
QScxmlDataModel *QScxmlStateMachine::dataModel() const
Возвращает используемую модель данных для автомата состояний.
Примечание: Функция-геттер для свойства dataModel.
См. также setDataModel().
[signal] void QScxmlStateMachine::finished()
Этот сигнал испускается, когда автомат состояний достигает конечного состояния верхнего уровня.
См. также running.
[static] QScxmlStateMachine *QScxmlStateMachine::fromData(QIODevice *data, const QString &fileName = QString())
Создаёт автомат состояний путём чтения из QIODevice, заданного data.
Этот метод всегда возвращает автомат состояний. Если при чтении SCXML-файла fileName возникнут ошибки, автомат состояний не может быть запущен. Ошибки можно получить, вызвав метод parseErrors().
См. также parseErrors().
[static] QScxmlStateMachine *QScxmlStateMachine::fromFile(const QString &fileName)
Создаёт автомат состояний из SCXML-файла, указанного fileName.
Этот метод всегда возвращает автомат состояний. Если при чтении SCXML-файла возникнут ошибки, автомат состояний не может быть запущен. Ошибки можно получить, вызвав метод parseErrors().
См. также parseErrors().
[slot] bool QScxmlStateMachine::init()
Инициализирует автомат состояний.
Инициализация автомата состояний состоит из вызова QScxmlDataModel::setup(), задания начальных значений для <data> элементов и выполнения любых <script> тегов тега <scxml>. Начальные значения данных берутся из свойства initialValues.
Возвращает false, если произошли ошибки разбора или если какой-либо из этапов инициализации завершился неудачно. Возвращает true, в противном случае.
bool QScxmlStateMachine::isActive(const QString &scxmlStateName) const
Возвращает true, если состояние, заданное scxmlStateName, активно, false, в противном случае.
[protected] bool QScxmlStateMachine::isActive(int stateIndex) const
Возвращает true, если состояние с идентификатором stateIndex активно.
Этот метод является частью интерфейса к скомпилированному представлению автоматов состояний SCXML. Он должен использоваться только внутри и автоматами состояний, скомпилированными из документов SCXML.
bool QScxmlStateMachine::isDispatchableTarget(const QString &target) const
Возвращает true если сообщение в target может быть обработано этим автоматом состояний.
Допустимые значения target:
-
#_parentдля родительского автомата состояний, если текущий автомат запущен<invoke> -
#_internalдля текущего автомата состояний -
#_scxml_sessionid, гдеsessionid— идентификатор сессии текущего автомата состояний -
#_servicename, гдеservicename— идентификатор или имя сервиса, запущенного с<invoke>этим автоматом состояний
bool QScxmlStateMachine::isRunning() const
Возвращает true если автомат состояний работает, false в противном случае.
Примечание: Функция-геттер для свойства running.
См. также setRunning() и runningChanged().
[signal] void QScxmlStateMachine::log(const QString &label, const QString &msg)
Этот сигнал излучается, если используется тег <log> в SCXML. label — значение атрибута label тега <log>. msg — значение вычисленного атрибута expr тега <log>. Если атрибут expr отсутствует, возвращается пустая строка.
[static] std::function<void( bool ) > QScxmlStateMachine::onEntry(const QObject *receiver, const char *method)
Возвращает функтор, принимающий булево значение и вызывающий заданный метод method на receiver с помощью QMetaObject::invokeMethod() если это значение true и receiver ещё не удалён.
Заданный method не должен принимать никаких аргументов. method — просто имя метода, не заключённое в SIGNAL() или SLOT().
Это полезно для обертывания обработчиков для connectToState(), которые должны выполняться только при входе в состояние.
[static] std::function<void( bool ) > QScxmlStateMachine::onEntry(Functor functor)
Возвращает функтор, принимающий булево значение и вызывающий заданный functor если это значение true. Заданный functor не должен принимать никаких аргументов.
Это полезно для обертывания обработчиков для connectToState(), которые должны выполняться только при входе в состояние.
[static] std::function<void( bool ) > QScxmlStateMachine::onEntry(const QObject *receiver, PointerToMemberFunction method)
Возвращает функтор, принимающий булево значение и вызывающий заданный method на receiver если это значение true и receiver ещё не удалён. Заданный method не должен принимать никаких аргументов.
Это полезно для обертывания обработчиков для connectToState(), которые должны выполняться только при входе в состояние.
[static] std::function<void( bool ) > QScxmlStateMachine::onExit(const QObject *receiver, const char *method)
Возвращает функтор, принимающий булево значение и вызывающий заданный метод method на receiver с помощью QMetaObject::invokeMethod() если это значение false и receiver ещё не удалён.
Заданный method не должен принимать никаких аргументов. method — просто имя метода, не заключённое в SIGNAL(...) или SLOT(...).
Это полезно для обертывания обработчиков для connectToState(), которые должны выполняться только при выходе из состояния.
[static] std::function<void( bool ) > QScxmlStateMachine::onExit(Functor functor)
Возвращает функтор, принимающий булево значение и вызывающий заданный functor если это значение false. Заданный functor не должен принимать никаких аргументов.
Это полезно для обертывания обработчиков для connectToState(), которые должны выполняться только при выходе из состояния.
[static] std::function<void( bool ) > QScxmlStateMachine::onExit(const QObject *receiver, PointerToMemberFunction method)
Возвращает функтор, принимающий булево значение и вызывающий заданный method на receiver если это значение false и receiver ещё не удалён. Заданный method не должен принимать никаких аргументов.
Это полезно для обертывания обработчиков для connectToState(), которые должны выполняться только при выходе из состояния.
[signal] void QScxmlStateMachine::reachedStableState()
Этот сигнал излучается, когда очередь событий пуста в конце макрошага или когда достигнуто конечное состояние.
[signal] void QScxmlStateMachine::runningChanged(bool running)
Этот сигнал излучается, когда изменяется свойство running со значением running.
Примечание: Сигнал-уведомление для свойства running.
void QScxmlStateMachine::setDataModel(QScxmlDataModel *model)
Устанавливает модель данных для этого автомата состояний в model. Существует взаимно-однозначное соответствие между автоматами состояний и моделями. После установки модели её нельзя изменить. Попытки установки модели с помощью этого метода будут проигнорированы.
Примечание: Функция-сеттер для свойства dataModel.
См. также dataModel().
void QScxmlStateMachine::setRunning(bool running)
Запускает автомат состояний, если running — true, или останавливает его в противном случае.
Примечание: Функция-сеттер для свойства running.
См. также start(), stop(), isRunning(), и runningChanged().
[slot] void QScxmlStateMachine::start()
Запускает этот автомат состояний. Автомат сбросит свою конфигурацию и перейдёт в начальное состояние. Когда будет введено конечное состояние верхнего уровня, автомат излучит сигнал finished().
Примечание: Автомат состояний не будет работать без работающей очереди событий, например, основной очереди событий приложения, запущенной с помощью QCoreApplication::exec() или QApplication::exec().
См. также runningChanged(), setRunning(), stop(), и finished().
QStringList QScxmlStateMachine::stateNames(bool compress = true) const
Возвращает список имён всех состояний.
Когда compress — true (по умолчанию), состояния, содержащие дочерние состояния, будут отфильтрованы, и будут возвращены только листовые состояния. Когда это false, будет возвращён полный список всех состояний.
Возвращаемый список не содержит состояния возможных вложенных автоматов состояний.
Примечание: Порядок имён состояний в списке — это порядок, в котором состояния встречались в документе SCXML.
[slot] void QScxmlStateMachine::stop()
Останавливает этот автомат состояний. Автомат не будет выполнять дальнейшие переходы состояний. Его свойство running устанавливается в false.
См. также runningChanged(), start(), и setRunning().
void QScxmlStateMachine::submitEvent(QScxmlEvent *event)
Отправляет событие SCXML event во внутреннюю или внешнюю очередь событий в зависимости от приоритета события.
Если установлена задержка, событие будет помещено в очередь на доставку после истечения таймаута. Автомат состояний берёт владение event и удаляет его после обработки.
void QScxmlStateMachine::submitEvent(const QString &eventName)
Утилитарный метод для создания и отправки внешнего события с указанным eventName в качестве имени.
void QScxmlStateMachine::submitEvent(const QString &eventName, const QVariant &data)
Утилитарный метод для создания и отправки внешнего события с указанным именем eventName в качестве имени и данными data в качестве полезной нагрузки.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qscxmlstatemachine.html