Как зарегистрировать функцию C ++ для модели данных scxml ecmascript?

Этот вопрос не рекомендуется

С тех пор я преобразовал свои конечные автоматы, чтобы использовать дополнительное состояние для вызова функции C ++ при вводе, и я запускаю sendEvent когда функция возвращает значение.

Старый вопрос заключается в следующем:

У меня есть простая модель SCXML, разработанная в Qt. Не хватает некоторых функций, таких как прослушивание очередей pub / sub, для которых я хочу зарегистрировать некоторые функции в QScxmlStateMachine экземпляр, чтобы я мог вызвать их из части ECMAScript конечного автомата. Я посмотрел на QScxmlEcmaScriptDataModel, но я не понимаю, как я могу изменить функции оценки для регистрации обратных вызовов. Можно ли зарегистрировать функции C ++ и обратные вызовы на конечные автоматы Qt scxml? Если так, то как?

Дополнительная информация:

Я создал класс под названием RegisterJs, это registerjs.h

#ifndef REGISTERJS_H
#define REGISTERJS_H

#include <QObject>
#include <QString>
#include <QQmlEngine>

class RegisterJS : public QObject
{
Q_OBJECT
public:
explicit RegisterJS(QObject *parent = nullptr);
Q_INVOKABLE void showMessage(QString message);
signals:

public slots:
};

static QObject *registerJSProvider(QQmlEngine *engine, QJSEngine *scriptEngine)
{
Q_UNUSED(engine)
Q_UNUSED(scriptEngine)

RegisterJS *singletonClass = new RegisterJS();
return singletonClass;
}

#endif // REGISTERJS_H

Это registerjs.cpp

#include "registerjs.h"#include <QMessageBox>

RegisterJS::RegisterJS(QObject *parent) : QObject(parent)
{

}

void RegisterJS::showMessage(QString message){
QMessageBox::information(0, message, message);
}

Вот как я регистрирую класс:

qmlRegisterSingletonType<RegisterJS>("in.nurett", 1, 0, "RegisterJS", registerJSProvider);

Это содержимое testflow.js:

function testShowMessage() { RegisterJS.showMessage("test"); }

Это соответствующий контент из testflow.scxml:

<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" binding="early" xmlns:qt="http://www.qt.io/2015/02/scxml-ext" name="teststate" qt:editorversion="4.6.2" initial="initialize">
<state id="initialize">
<onentry>
<script>testShowMessage();</script>
</onentry>
</state>
<script src=":testflow.js"/>

Но информационное сообщение не появляется.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]