Qt:如何从 qscriptengine 传递数组或字典?
Qt: How are arrays or dictionaries passed from 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);
很难解决,因为当它不起作用时,调用似乎无声地失败了。
对于数组,您有两个选择
向脚本引擎注册 C++ 序列容器,请参阅 qScriptRegisterSequenceMetaType()
。该函数的文档有一个 int 向量的示例。
使用 QScriptValue
作为函数的参数。然后可以检查传递的对象是否为数组 (QScriptValue::isArray()
) 并使用 QScriptValue::property()
通过索引访问
选项 (2) 也适用于字典(JavaScript 中的对象)。
我创建了一个 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 中的对象)。