Qt:如何从qscriptengine传递数组或字典?
问题描述:
我创建了一个QScriptEngine,并公开了一个可以从js脚本调用的对象函数。Qt:如何从qscriptengine传递数组或字典?
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对象)按索引进行访问。
+0
选项2似乎是一个简单的方法。我使用QScriptValue.property(“length”)来获取长度和QScriptValue(“INDEX_HERE”)以获取特定索引。谢谢。 – voodoogiant
你试过QVariantList吗? – jpnurmi