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); 

当它不起作用时,很难将其解决,这个呼叫似乎默默无闻。

+0

你试过QVariantList吗? – jpnurmi

对于数组你有两个选择

  1. 注册的脚本引擎的C++程序容器,见qScriptRegisterSequenceMetaType()。该函数的文档有一个int向量的例子。

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

选项(2)也适用于字典(在JavaScript对象)按索引进行访问。

+0

选项2似乎是一个简单的方法。我使用QScriptValue.property(“length”)来获取长度和QScriptValue(“INDEX_HERE”)以获取特定索引。谢谢。 – voodoogiant