Spec-Zone.ru › Qt

Класс 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
  • Список всех членов, включая наследуемые

Свойства

  • dataModel : QScxmlDataModel*
  • initialValues : QVariantMap
  • initialized : bool
  • invoked : const bool
  • invokedServices : QList<QScxmlInvokableService*>
  • loader : QScxmlCompiler::Loader*
  • name : const QString
  • parseErrors : const QList<QScxmlError>
  • running : bool
  • sessionId : const QString
  • tableData : QScxmlTableData*

Общедоступные функции

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

Spec-Zone.ru

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