问:如何从qscriptengine传递数组或词典?

时间:2016-11-06 04:40:22

标签: javascript c++ qt moc qscript

我已经创建了一个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);

很难解决这个问题,因为当它无法正常工作时,呼叫似乎无声地失败了。

1 个答案:

答案 0 :(得分:1)

对于数组,您有两个选项

  1. 使用脚本引擎注册C ++序列容器,请参阅qScriptRegisterSequenceMetaType()。函数的文档有一个int向量的例子。

  2. 使用QScriptValue作为函数的参数。然后可以检查传递的对象是否是数组(QScriptValue::isArray())并使用QScriptValue::property()

  3. 通过索引访问

    选项(2)也适用于字典(JavaScript中的对象)。