Класс QScxmlStateMachine
Класс QScxmlStateMachine предоставляет интерфейс к автоматам состояний, созданным из файлов SCXML. Подробнее...
| Заголовок: | #include <QScxmlStateMachine> |
| CMake: | find_package(Qt6 COMPONENTS Scxml REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Scxml) |
| qmake: | QT += scxml |
| С версии: | Qt 5.7 |
| Создаётся из: | ScxmlStateMachine |
| Наследует: | 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 typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection) |
| typename std::enable_if<!QtPrivate::FunctionPointer<Functor>::IsPointerToMemberFunction && !std::is_same<const char *, Functor>::value, QMetaObject::Connection>::type | connectToEvent(const QString &scxmlEventSpec, Functor functor, Qt::ConnectionType type = Qt::AutoConnection) |
| typename std::enable_if<!QtPrivate::FunctionPointer<Functor>::IsPointerToMemberFunction && !std::is_same<const char *, Functor>::value, QMetaObject::Connection>::type | 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 typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection) |
| typename std::enable_if<!QtPrivate::FunctionPointer<Functor>::IsPointerToMemberFunction && !std::is_same<const char *, Functor>::value, QMetaObject::Connection>::type | connectToState(const QString &scxmlStateName, Functor functor, Qt::ConnectionType type = Qt::AutoConnection) |
| typename std::enable_if<!QtPrivate::FunctionPointer<Functor>::IsPointerToMemberFunction && !std::is_same<const char *, Functor>::value, QMetaObject::Connection>::type | connectToState(const QString &scxmlStateName, const QObject *context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection) |
| QScxmlDataModel * | dataModel() const |
| QVariantMap | initialValues() |
| QList<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 |
| QList<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 |
Общедоступные слоты
| bool | init() |
| void | start() |
| void | stop() |
Сигналы
| void | dataModelChanged(QScxmlDataModel *model) |
| void | finished() |
| void | initialValuesChanged(const QVariantMap &initialValues) |
| void | initializedChanged(bool initialized) |
| void | invokedServicesChanged(const QList<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) |
Статические публичные члены
| 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 typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *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 typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *receiver, PointerToMemberFunction method) |
Защищенные функции
| bool | isActive(int stateIndex) const |
Подробное описание
QScxmlStateMachine — это реализация State Chart XML (SCXML).
Все состояния, определённые в файле SCXML, доступны как свойства QScxmlStateMachine. Эти свойства — булевы значения, указывающие, активное состояние или нет.
Примечание: QScxmlStateMachine требует QEventLoop для корректной работы. Внутри цикла обработки событий реализована функция delay для обработки событий, и планирование работы машины состояний происходит при поступлении событий из вложенных (или родительских) машин состояний.
Документация свойств
[bindable] dataModel : QScxmlDataModel*
Примечание: Это свойство поддерживает привязки QProperty.
Это свойство содержит модель данных, которая будет использоваться для этой машины состояний.
Модели данных SCXML описаны в Спецификация SCXML - 5 Модель данных и манипулирование данными. Дополнительную информацию о поддерживаемых моделях данных см. в Соответствии SCXML.
Изменение модели данных, когда машина состояний уже initialized не указано в стандарте SCXML и приводит к неопределённому поведению.
См. также QScxmlDataModel, QScxmlNullDataModel и QScxmlCppDataModel.
[bindable] initialValues : QVariantMap
Примечание: Это свойство поддерживает привязки QProperty.
Это свойство содержит начальные значения, которые будут использоваться для настройки модели данных.
См. также QScxmlStateMachine::init() и QScxmlDataModel.
[bindable read-only] initialized : bool
Примечание: Это свойство поддерживает привязки QProperty.
Это свойство указывает, была ли инициализирована машина состояний.
Это true, если машина состояний была инициализирована, false в противном случае.
См. также QScxmlStateMachine::init() и QScxmlDataModel.
[read-only] invoked : const bool
Это свойство указывает, была ли машина состояний вызвана из внешней машины состояний.
true когда машина состояний была запущена как служба с элементом <invoke>, false в противном случае.
Функции доступа:
| bool | isInvoked() const |
[bindable read-only] invokedServices : QList<QScxmlInvokableService*>
Примечание: Это свойство поддерживает привязки QProperty.
Это свойство содержит список SCXML-служб, которые были вызваны из основной машины состояний (возможно, рекурсивно).
[bindable] loader : QScxmlCompiler::Loader*
Примечание: Это свойство поддерживает привязки QProperty.
Это свойство содержит загрузчик, который в данный момент используется для разрешения и загрузки URI для машины состояний.
[read-only] name : const QString
Это свойство содержит имя машины состояний, заданное атрибутом name тега <scxml>.
Функции доступа:
| QString | name() const |
[read-only] parseErrors : const QList<QScxmlError>
Это свойство содержит список ошибок разбора, возникших при создании машины состояний из файла SCXML.
Функции доступа:
| QList<QScxmlError> | parseErrors() const |
running : bool
Это свойство содержит состояние выполнения этой машины состояний.
Функции доступа:
| bool | isRunning() const |
| void | setRunning(bool running) |
Сигнал уведомления:
| void | runningChanged(bool running) |
См. также start().
[read-only] sessionId : const QString
Это свойство содержит идентификатор сеанса текущей машины состояний.
Идентификатор сеанса используется для маршрутизации сообщений между родительской и дочерней машинами состояний. Если машина состояний запускается с помощью элемента <invoke>, любые отправляемые ею события будут иметь поле invokeid со значением идентификатора сеанса. Машина состояний будет использовать источник события (который устанавливается атрибутом target или targetexpr в элементе <send> для отправки сообщений в соответствующую дочернюю машину состояний.
Функции доступа:
| QString | sessionId() const |
См. также QScxmlEvent::invokeId().
[bindable] tableData : QScxmlTableData*
Примечание: Это свойство поддерживает привязки QProperty.
Это свойство содержит данные таблицы, которые используются при генерации C++ из файла SCXML.
Класс, реализующий машину состояний, будет использовать это свойство для присвоения сгенерированных данных таблицы. Машина состояний не предполагает владения данными таблицы.
Документация членов-функций
[signal] void QScxmlStateMachine::finished()
Этот сигнал излучается, когда машина состояний достигает конечного состояния верхнего уровня.
См. также running.
[slot] bool QScxmlStateMachine::init()
Инициализирует машину состояний.
Инициализация машины состояний включает в себя вызов QScxmlDataModel::setup(), установку начальных значений для <data> элементов и выполнение любых <script> тегов тега <scxml>. Начальные значения данных берутся из свойства initialValues.
Возвращает false если произошли ошибки разбора или любой из шагов инициализации завершился неудачей. Возвращает true в противном случае.
[signal] void QScxmlStateMachine::log(const QString &label, const QString &msg)
Этот сигнал излучается, если используется тег <log> в SCXML. label - значение атрибута label тега <log>. msg - значение вычисленного атрибута expr тега <log>. Если атрибут expr отсутствует, будет возвращена пустая строка.
[signal] void QScxmlStateMachine::reachedStableState()
Этот сигнал излучается, когда очередь событий пуста в конце макрошага или когда достигнуто конечное состояние.
[signal] void QScxmlStateMachine::runningChanged(bool running)
Этот сигнал излучается при изменении свойства running с running в качестве аргумента.
Примечание: Сигнал уведомления для свойства running.
[slot] void QScxmlStateMachine::start()
Запускает эту машину состояний. Машина сбросит свою конфигурацию и перейдет в начальное состояние. При входе в конечное состояние верхнего уровня машина излучит сигнал finished().
Примечание: Машина состояний не будет работать без работающего цикла событий, например, основного цикла событий приложения, запущенного с помощью QCoreApplication::exec() или QApplication::exec().
См. также runningChanged(), setRunning(), stop() и finished().
[slot] void QScxmlStateMachine::stop()
Останавливает эту машину состояний. Машина не будет выполнять дальнейшие переходы состояний. Свойство running устанавливается в значение false.
См. также runningChanged(), start() и setRunning().
[invokable] QStringList QScxmlStateMachine::activeStateNames(bool compress = true) const
Возвращает список имён активных состояний.
Когда состояние активно, все его родительские состояния также активны по определению. Если compress имеет значение true (по умолчанию), родительские состояния будут отфильтрованы, и будут возвращены только листовые состояния. Если compress имеет значение false, будет возвращён полный список активных состояний.
Примечание: К этой функции можно обратиться через систему метаобъектов и из QML. См. Q_INVOKABLE.
[invokable] void QScxmlStateMachine::cancelDelayedEvent(const QString &sendId)
Отменяет отложенное событие со значением sendId.
Примечание: Данная функция может вызываться через метаобъектную систему и из QML. См. Q_INVOKABLE.
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() несколько раз.
Возвращает дескриптор соединения, который можно использовать для последующего отключения.
template <typename PointerToMemberFunction> QMetaObject::Connection QScxmlStateMachine::connectToEvent(const QString &scxmlEventSpec, const typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection)
Создаёт соединение указанного типа type от события, заданного scxmlEventSpec, к методу method в объекте receiver.
Метод method объекта receiver должен принимать QScxmlEvent в качестве параметра.
В отличие от спецификаций событий в SCXML-документах, пробелы в scxmlEventSpec здесь недопустимы. Для подключения к нескольким событиям с разными префиксами, необходимо вызывать connectToEvent() несколько раз.
Возвращает дескриптор соединения, который можно использовать для последующего отключения.
template <typename Functor> typename std::enable_if<!QtPrivate::FunctionPointer<Functor>::IsPointerToMemberFunction && !std::is_same<const char *, Functor>::value, QMetaObject::Connection>::type QScxmlStateMachine::connectToEvent(const QString &scxmlEventSpec, Functor functor, Qt::ConnectionType type = Qt::AutoConnection)
Создаёт соединение указанного типа type от события, заданного scxmlEventSpec, к functor.
Functor должен принимать QScxmlEvent в качестве параметра.
В отличие от спецификаций событий в SCXML-документах, пробелы в scxmlEventSpec здесь недопустимы. Для подключения к нескольким событиям с разными префиксами, необходимо вызывать connectToEvent() несколько раз.
Возвращает дескриптор соединения, который можно использовать для последующего отключения.
template <typename Functor> typename std::enable_if<!QtPrivate::FunctionPointer<Functor>::IsPointerToMemberFunction && !std::is_same<const char *, Functor>::value, QMetaObject::Connection>::type 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);
Возвращает дескриптор соединения, который можно использовать для последующего отключения.
template <typename PointerToMemberFunction> QMetaObject::Connection QScxmlStateMachine::connectToState(const QString &scxmlStateName, const typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection)
Создаёт соединение указанного типа type от состояния, определённого scxmlStateName, к методу method в объекте receiver.
Метод method объекта receiver должен принимать булевый аргумент, указывающий, активировано ли подключённое состояние или нет.
Возвращает дескриптор соединения, который можно использовать для последующего отключения.
template <typename Functor> typename std::enable_if<!QtPrivate::FunctionPointer<Functor>::IsPointerToMemberFunction && !std::is_same<const char *, Functor>::value, QMetaObject::Connection>::type QScxmlStateMachine::connectToState(const QString &scxmlStateName, Functor functor, Qt::ConnectionType type = Qt::AutoConnection)
Создаёт соединение указанного типа type от состояния, определённого scxmlStateName, к functor.
Functor должен принимать булевый аргумент, указывающий, активировано ли подключённое состояние или нет.
Возвращает дескриптор соединения, который можно использовать для последующего отключения.
template <typename Functor> typename std::enable_if<!QtPrivate::FunctionPointer<Functor>::IsPointerToMemberFunction && !std::is_same<const char *, Functor>::value, QMetaObject::Connection>::type 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().
[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().
[invokable] bool QScxmlStateMachine::isActive(const QString &scxmlStateName) const
Возвращает true , если состояние, указанное scxmlStateName, активно, false в противном случае.
Примечание: Этот метод может быть вызван через систему метаобъектов и из QML. См. Q_INVOKABLE.
[protected] bool QScxmlStateMachine::isActive(int stateIndex) const
Возвращает true , если состояние с ID stateIndex активно.
Этот метод является частью интерфейса к скомпилированному представлению автоматов состояний SCXML. Он должен использоваться только внутри и автоматами состояний, скомпилированными из документов SCXML.
[invokable] bool QScxmlStateMachine::isDispatchableTarget(const QString &target) const
Возвращает true , если сообщение в target может быть отправлено этим автоматом состояний.
Допустимые целевые адреса:
-
#_parentдля родительского автомата состояний, если текущий автомат состояний запущен через<invoke> -
#_internalдля текущего автомата состояний -
#_scxml_sessionid, гдеsessionid— идентификатор сеанса текущего автомата состояний -
#_servicename, гдеservicename— идентификатор или имя службы, запущенной с помощью<invoke>этим автоматом состояний
Примечание: Этот метод может быть вызван через систему метаобъектов и из QML. См. Q_INVOKABLE.
bool QScxmlStateMachine::isRunning() const
Возвращает true , если автомат состояний запущен, false в противном случае.
Примечание: Метод-геттер для свойства running.
См. также setRunning() и runningChanged().
[static] std::function<void (bool)> QScxmlStateMachine::onEntry(const QObject *receiver, const char *method)
Возвращает функтор, принимающий булевый аргумент и вызывающий указанный метод на receiver с помощью QMetaObject::invokeMethod(), если этот аргумент true и receiver еще не удален.
Указанный метод не должен принимать никаких аргументов. method — это просто имя метода, не заключенное в SIGNAL(...) или SLOT(...).
Это полезно для обертывания обработчиков для connectToState(), которые должны выполняться только при входе в состояние.
[static] template <typename Functor> std::function<void (bool)> QScxmlStateMachine::onEntry(Functor functor)
Возвращает функтор, принимающий булевый аргумент и вызывающий указанный functor, если этот аргумент true. Указанный functor не должен принимать никаких аргументов.
Это полезно для обертывания обработчиков для connectToState(), которые должны выполняться только при входе в состояние.
[static] template <typename PointerToMemberFunction> std::function<void (bool)> QScxmlStateMachine::onEntry(const typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *receiver, PointerToMemberFunction method)
Возвращает функтор, принимающий булевый аргумент и вызывающий указанный метод на receiver, если этот аргумент true и receiver еще не удален. Указанный метод не должен принимать никаких аргументов.
Это полезно для обертывания обработчиков для connectToState(), которые должны выполняться только при входе в состояние.
[static] std::function<void (bool)> QScxmlStateMachine::onExit(const QObject *receiver, const char *method)
Возвращает функтор, принимающий булевый аргумент и вызывающий указанный метод на receiver с помощью QMetaObject::invokeMethod(), если этот аргумент false и receiver еще не удален.
Указанный метод не должен принимать никаких аргументов. method — это просто имя метода, не заключенное в SIGNAL(...) или SLOT(...).
Это полезно для обертывания обработчиков для connectToState(), которые должны выполняться только при выходе из состояния.
[static] template <typename Functor> std::function<void (bool)> QScxmlStateMachine::onExit(Functor functor)
Возвращает функтор, принимающий булевый аргумент и вызывающий указанный functor, если этот аргумент false. Указанный functor не должен принимать никаких аргументов.
Это полезно для обертывания обработчиков для connectToState(), которые должны выполняться только при выходе из состояния.
[static] template <typename PointerToMemberFunction> std::function<void (bool)> QScxmlStateMachine::onExit(const typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *receiver, PointerToMemberFunction method)
Возвращает функтор, принимающий булевый аргумент и вызывающий указанный метод на receiver, если этот аргумент false и receiver еще не удален. Указанный метод не должен принимать никаких аргументов.
Это полезно для обертывания обработчиков для connectToState(), которые должны выполняться только при выходе из состояния.
void QScxmlStateMachine::setDataModel(QScxmlDataModel *model)
Устанавливает модель данных для этого автомата состояний в model. Существует 1:1 соотношение между автоматами состояний и моделями. После установки модели ее нельзя больше изменить. Все дальнейшие попытки установить модель с помощью этого метода будут проигнорированы.
Примечание: Метод-сеттер для свойства dataModel.
См. также dataModel().
void QScxmlStateMachine::setRunning(bool running)
Запускает автомат состояний, если running true, или останавливает его в противном случае.
Примечание: Метод-сеттер для свойства running.
См. также start(), stop(), isRunning() и runningChanged().
[invokable] QStringList QScxmlStateMachine::stateNames(bool compress = true) const
Возвращает список имен всех состояний.
Когда compress true (по умолчанию), состояния, содержащие дочерние состояния, будут отфильтрованы, и будут возвращены только листовые состояния. Когда compress false, будет возвращен полный список всех состояний.
Возвращаемый список не содержит состояний возможных вложенных автоматов состояний.
Примечание: Порядок имен состояний в списке — порядок, в котором состояния встречались в документе SCXML.
Примечание: Этот метод может быть вызван через систему метаобъектов и из QML. См. Q_INVOKABLE.
[invokable] void QScxmlStateMachine::submitEvent(QScxmlEvent *event)
Отправляет событие SCXML event во внутреннюю или внешнюю очередь событий в зависимости от приоритета события.
Если задана задержка, событие будет помещено в очередь для доставки после истечения таймаута. Автомат состояний берет владение над event и удаляет его после обработки.
Примечание: Этот метод может быть вызван через систему метаобъектов и из QML. См. Q_INVOKABLE.
[invokable] void QScxmlStateMachine::submitEvent(const QString &eventName)
Утилитарный метод для создания и отправки внешнего события с указанным eventName в качестве имени.
Примечание: Этот метод может быть вызван через систему метаобъектов и из QML. См. Q_INVOKABLE.
[invokable] void QScxmlStateMachine::submitEvent(const QString &eventName, const QVariant &data)
Утилитарный метод для создания и отправки внешнего события с указанным eventName в качестве имени и data в качестве данных полезной нагрузки.
Примечание: Данную функцию можно вызывать через метаобъектную систему и из QML. См. Q_INVOKABLE.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qscxmlstatemachine.html