我已经创建了一个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向量的例子。
使用QScriptValue
作为函数的参数。然后可以检查传递的对象是否是数组(QScriptValue::isArray()
)并使用QScriptValue::property()
选项(2)也适用于字典(JavaScript中的对象)。