Spec-Zone.ru › Qt 5.9

Класс QScxmlCppDataModel

Класс QScxmlCppDataModel — это модель данных C++ для автомата состояния Qt SCXML. Подробнее...

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

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

QScxmlCppDataModel(QObject *parent = nullptr)
bool inState(const QString &stateName) const
const QScxmlEvent & scxmlEvent() const

Переопределенные открытые функции

virtual void evaluateAssignment(QScxmlExecutableContent::EvaluatorId id, bool *ok)
virtual void evaluateForeach(QScxmlExecutableContent::EvaluatorId id, bool *ok, ForeachLoopBody *body)
virtual void evaluateInitialization(QScxmlExecutableContent::EvaluatorId id, bool *ok)
virtual bool hasScxmlProperty(const QString &name) const
virtual QVariant scxmlProperty(const QString &name) const
virtual void setScxmlEvent(const QScxmlEvent &event)
virtual bool setScxmlProperty(const QString &name, const QVariant &value, const QString &context)
virtual bool setup(const QVariantMap &initialDataValues)
  • 14 открытых функций унаследовано от QScxmlDataModel
  • 32 открытых функции унаследовано от QObject

Дополнительные унаследованные члены

  • 1 свойство унаследовано от QScxmlDataModel
  • 1 свойство унаследовано от QObject
  • 1 открытый слот унаследован от QObject
  • 1 сигнал унаследован от QScxmlDataModel
  • 2 сигнала унаследовано от QObject
  • 11 статических открытых членов унаследовано от QObject
  • 9 защищенных функций унаследовано от QObject

Подробное описание

Класс QScxmlCppDataModel — это модель данных C++ для автомата состояния Qt SCXML.

Модель данных C++ для SCXML позволяет писать код C++ для атрибутов expr и элементов <script>. Часть данных модели данных поддерживается подклассом QScxmlCppDataModel, для которого компилятор Qt SCXML (qscxmlc) сгенерирует методы обработки. Его нельзя использовать при загрузке файла SCXML во время выполнения.

Использование происходит через атрибут datamodel элемента <scxml>:

<scxml datamodel="cplusplus:TheDataModel:thedatamodel.h"  ....>

Формат атрибута datamodel: cplusplus:<class-name>:<classdef-header>. Таким образом, для приведенного выше примера должен быть файл thedatamodel.h, содержащий подкласс QScxmlCppDataModel, содержащий по крайней мере следующее:

#include "qscxmlcppdatamodel.h"

class TheDataModel: public QScxmlCppDataModel
{
    Q_OBJECT
    Q_SCXML_DATAMODEL
};

Макрос Q_SCXML_DATAMODEL должен появиться в разделе private определения класса, например, сразу после открывающей скобки или после макроса Q_OBJECT. Этот макрос расширяется до объявления некоторых виртуальных методов, реализация которых генерируется компилятором Qt SCXML.

Компилятор Qt SCXML сгенерирует различные evaluateTo методы и преобразует выражения и скрипты в лямбда-функции внутри этих методов. Например:

<scxml datamodel="cplusplus:TheDataModel:thedatamodel.h" xmlns="http://www.w3.org/2005/07/scxml" version="1.0" name="MediaPlayerStateMachine">
    <state id="stopped">
        <transition event="tap" cond="isValidMedia()" target="playing"/>
    </state>

    <state id="playing">
        <onentry>
            <script>
                media = eventData().value(QStringLiteral(&quot;media&quot;)).toString();
            </script>
            <send event="playbackStarted">
                <param name="media" expr="media"/>
            </send>
        </onentry>
    </state>
</scxml>

Это приведет к:

bool TheDataModel::evaluateToBool(QScxmlExecutableContent::EvaluatorId id, bool *ok) {
    // ....
        return [this]()->bool{ return isValidMedia(); }();
    // ....
}

QVariant TheDataModel::evaluateToVariant(QScxmlExecutableContent::EvaluatorId id, bool *ok) {
    // ....
        return [this]()->QVariant{ return media; }();
    // ....
}

void TheDataModel::evaluateToVoid(QScxmlExecutableContent::EvaluatorId id, bool *ok) {
    // ....
        [this]()->void{ media = eventData().value(QStringLiteral("media")).toString(); }();
    // ....
}

Таким образом, вы не ограничены вызовами функций. В элементе <script> можно указать ноль или более операторов C++, а в атрибутах cond или expr можно использовать любые выражения C++, которые могут быть преобразованы в соответствующие bool или QVariant. Кроме того, так как указатель на this также захватывается, вы можете вызывать или обращаться к модели данных (атрибут media в примере выше). Для полного примера см. Qt SCXML: Пример медиаплеера QML (модель данных C++).

См. также QScxmlStateMachine и QScxmlDataModel.

Документация по членам-функциям

QScxmlCppDataModel::QScxmlCppDataModel(QObject *parent = nullptr)

Создает новую модель данных C++ с родительским объектом parent.

[virtual] void QScxmlCppDataModel::evaluateAssignment(QScxmlExecutableContent::EvaluatorId id, bool *ok)

Переопределено из QScxmlDataModel::evaluateAssignment().

Этот метод не выполняет никаких действий, игнорирует id и устанавливает ok в false. Переопределите его в своей конкретной модели данных, чтобы реализовать <assign>.

[virtual] void QScxmlCppDataModel::evaluateForeach(QScxmlExecutableContent::EvaluatorId id, bool *ok, ForeachLoopBody *body)

Переопределено из QScxmlDataModel::evaluateForeach().

Этот метод не выполняет никаких действий, игнорирует id и body, и устанавливает ok в false. Переопределите его в своей конкретной модели данных, чтобы реализовать <foreach>.

[virtual] void QScxmlCppDataModel::evaluateInitialization(QScxmlExecutableContent::EvaluatorId id, bool *ok)

Переопределено из QScxmlDataModel::evaluateInitialization().

Этот метод не выполняет никаких действий, игнорирует id и устанавливает ok в false. Переопределите его в своей конкретной модели данных, чтобы реализовать <data>.

[virtual] bool QScxmlCppDataModel::hasScxmlProperty(const QString &name) const

Переопределено из QScxmlDataModel::hasScxmlProperty().

Этот метод всегда возвращает false и игнорирует name. Переопределите его, чтобы реализовать поиск свойств модели данных через атрибут location различных элементов.

bool QScxmlCppDataModel::inState(const QString &stateName) const

Возвращает true , если автомат состояния находится в состоянии, указанном stateName, false в противном случае.

const QScxmlEvent &QScxmlCppDataModel::scxmlEvent() const

Содержит текущее событие, обрабатываемое автоматом состояния.

См. спецификацию SCXML - 5.10 Переменные системы для описания переменной _event.

Возвращает обрабатываемое в настоящее время событие.

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

[virtual] QVariant QScxmlCppDataModel::scxmlProperty(const QString &name) const

Переопределено из QScxmlDataModel::scxmlProperty().

Этот метод всегда возвращает пустой QVariant и игнорирует name. Переопределите его, чтобы реализовать поиск свойств модели данных через атрибут location различных элементов.

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

[virtual] void QScxmlCppDataModel::setScxmlEvent(const QScxmlEvent &event)

Переопределено из QScxmlDataModel::setScxmlEvent().

Устанавливает событие, которое будет обработано следующим.

См. также QScxmlCppDataModel::scxmlEvent.

[virtual] bool QScxmlCppDataModel::setScxmlProperty(const QString &name, const QVariant &value, const QString &context)

Переопределено из QScxmlDataModel::setScxmlProperty().

Этот метод всегда возвращает false и игнорирует name, value и context. Переопределите его, чтобы реализовать поиск свойств модели данных с помощью атрибута location различных элементов.

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

[virtual] bool QScxmlCppDataModel::setup(const QVariantMap &initialDataValues)

Переопределено из QScxmlDataModel::setup().

Вызывается во время инициализации машины состояний для настройки машины состояний с использованием начальных значений переменных модели данных, заданных их ключами, initialDataValues. Это значения, заданные тегами <param> в элементе <invoke>.

См. также QScxmlStateMachine::init.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qscxmlcppdatamodel.html

Spec-Zone.ru

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