0

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

很难解决,因为当它不起作用时,呼叫似乎默默地失败了。

4

1 回答 1

1

对于数组,您有两个选择

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

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

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

于 2016-11-06T15:02:28.940 回答