Я создал QScriptEngine и показал функцию объекта, которую я могу вызвать из скрипта js.
engine->globalObject().setProperty("obj", myObj);
myObj — это QObject, который имеет функцию, подобную …
void MyObject::doSomething(int w, int h) {
...
}
и в моем коде JS, я могу назвать это как …
obj.doSomething(5, 9);
Это работает, как я и ожидал, но я не могу найти никаких документов по передаче массивов или словарей для этих функций. Например, если бы я хотел передать массив, как бы я определил функцию C ++, чтобы я мог сделать что-то вроде этого …
obj.doSomething([1,2,3], "foo");
Было бы что-то вроде …
void MyObject::doSomething(QVector<QVariant> firstArg, QString secondArg);
Трудно разобраться, потому что, когда он не работает, кажется, что звонок молча проваливается.
Для массивов у вас есть два варианта
Регистрация контейнера последовательности C ++ с помощью механизма сценариев приведена в разделе qScriptRegisterSequenceMetaType()
, В документации функции есть пример для вектора типа int.
использование QScriptValue
в качестве аргумента функции. Переданный объект может быть проверен, если это массив (QScriptValue::isArray()
) и доступ по индексу с использованием QScriptValue::property()
Вариант (2) также работает для словарей (объекты в JavaScript).
Других решений пока нет …