Javascript — Qt: Как массивы или словари передаются из qscriptengine?

Я создал 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);

Трудно разобраться, потому что, когда он не работает, кажется, что звонок молча проваливается.

0

Решение

Для массивов у вас есть два варианта

  1. Регистрация контейнера последовательности C ++ с помощью механизма сценариев приведена в разделе qScriptRegisterSequenceMetaType(), В документации функции есть пример для вектора типа int.

  2. использование QScriptValue в качестве аргумента функции. Переданный объект может быть проверен, если это массив (QScriptValue::isArray()) и доступ по индексу с использованием QScriptValue::property()

Вариант (2) также работает для словарей (объекты в JavaScript).

1

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

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

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