javascript - Qt:如何从 qscriptengine 传递数组或字典?

标签 javascript c++ qt moc qscript

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

很难解决,因为当它不起作用时,调用似乎无声地失败了。

最佳答案

对于数组你有两个选择

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

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

    通过索引访问/li>

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

关于javascript - Qt:如何从 qscriptengine 传递数组或字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40446047/

相关文章:

javascript - 通过 innerHTML 输出时的文本区域内容显示为已编码

c++ - Cocos2d-x TMX map 与游戏 Sprite 共享纹理图像文件?

c++ - c++中如何使用一个指针指向另一个指针

qt - 有什么办法可以延迟Qt QEvent吗?

qt - PhantomJS 2.0 文本在呈现为 PDF 时无法选择

javascript - AJAX 将内容加载到 DIV 中。哪个页面拥有/控制什么?

javascript - 如何在请求中操作 res.locals 对象?

javascript - 基本 D3.js : create or update element?

c++ - 在 Boost 周围使用 "#pragma warning"时出现警告 C4503 包括

c++ - 从以 QStringListModel 作为模型的 QListview 中删除单个项目