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 vector的示例。 -
使用
QScriptValue
作为函数的参数。然后可以检查传递的对象是否为数组(QScriptValue::isArray()
),并使用QScriptValue::property()
通过索引访问。
选项(2)也适用于字典(JavaScript中的对象)。
相关文章:
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 将对象数组的引用传递给函数
- Pybind11:将元组列表从Python传递到C++
- std::向量与传递值的动态数组
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 使用指向成员的指针将成员函数作为参数传递
- Ctypes wstring通过引用传递
- C++数组传递给大小为的函数
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- C++/传递值导致#DEN
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何将参数传递给正在使用模板的类
- 将重载的成员函数传递给函数模板
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 如何将函数集合传递给客户端类,以便将它们当作客户端类本身的成员使用
- 通过JNI传递数据数组的最快方法是什么
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 修改函数中的指针(将另一个指针作为参数传递)
- 通过网络、跨平台传递std::变体是否安全
- Qt:数组或字典如何从qscriptengine传递