Создание пользовательской модели данных для Qt SCXML
Я использую Qt с конечным автоматом SCXML. Я хочу использовать встроенный интерпретатор Qt SCXML через QScxmlStateMachine
, Однако Qt поддерживает только модели данных Null, EcmaScript и C++ для SCXML. У моего конечного автомата есть пользовательская модель данных.
Я хотел бы подкласс QScxmlDataModel
поддержать мой конечный автомат. Я могу видеть, как реализация setup()
, hasScxmlProperty()
, setScxmlProperty()
, а также scxmlProperty()
функции позволят устанавливать / получать значения из модели данных.
Тем не менее, я не вижу, как сделать так, чтобы выражения и другие специфичные для модели элементы, такие как с <transition cond="...">
или же <script>...</script>
- будет правильно оцениваться в моей пользовательской модели данных.
Как я могу создать собственную модель данных, которая знает, как сделать больше, чем просто получить / установить свойства?
1 ответ
Вам нужно будет переопределить различные функции оценки QScxmlDataModel
:
virtual QString evaluateToString(QScxmlExecutableContent::EvaluatorId id, bool *ok) = 0;
virtual bool evaluateToBool(QScxmlExecutableContent::EvaluatorId id, bool *ok) = 0;
virtual QVariant evaluateToVariant(QScxmlExecutableContent::EvaluatorId id, bool *ok) = 0;
virtual void evaluateToVoid(QScxmlExecutableContent::EvaluatorId id, bool *ok) = 0;
virtual void evaluateAssignment(QScxmlExecutableContent::EvaluatorId id, bool *ok) = 0;
virtual void evaluateInitialization(QScxmlExecutableContent::EvaluatorId id, bool *ok) = 0;
virtual bool evaluateForeach(QScxmlExecutableContent::EvaluatorId id, bool *ok, ForeachLoopBody *body) = 0;
Все они были исключены из документации, но вы можете увидеть их здесь.
Я предполагаю, что причина этого в том, что модуль Qt SCXML выпущен в качестве предварительного просмотра технологии, и API может измениться в будущем.