由于QJSValue
上的qt文档,QJsonObject
不能隐式转换为QJSValue
,我想从C中使用QJSEngine
调用一个javascript函数,参数应该使用QList<QJsValue>
传递,以调用另一个QJSValue
的函数,该函数本身包含该函数。
问题是我的一个参数是QJsonObject
,到目前为止,我应该将其转换为文本,然后调用并传递给JavaScript函数,该函数调用JSON.parse
将其转换为对象,我正在寻找一个解决方案,让我在C中将QJsonObject
转换为QJSValue
,并使用对象参数而不是json文本调用JavaScript函数。
当前代码如下所示
QJsonObject obj;
obj["1"] = QString("A");
obj["2"] = QString("B");
QJSValue func = myEngine.evaluate("(function(arg) { var obj = JSON.parse(arg); var res = obj[\"1\"] + obj[\"2\"]; return res; })");
QJSValueList args;
args << QString(QJsonDocument(obj).toJson());
QJSValue res = func.call(args);
我希望有一个类似QJSValue ConvertToQJSValue(QJsonObject object)
的函数,类似于:
QJsonObject obj;
obj["1"] = QString("A");
obj["2"] = QString("B");
QJSValue func = myEngine.evaluate("(function(arg) { var res = arg[\"1\"] + arg[\"2\"]; return res; })");
QJSValueList args;
args << ConvertToQJSValue(obj);
QJSValue res = func.call(args);
3条答案
按热度按时间kxe2p93d1#
我也遇到过类似的问题,我开始沿着从QJsonValue递归遍历树并从中构建QJSValue的道路前进。
在上面的代码中,您可以传递一个QJsonObject或任何其他类型的JSON节点,以便转换为QJSValue。
我现在使用的是更接近您原来的解决方案的方法--只需从引擎中调用JSON.parse:
np8igboo2#
可以使用
toScriptValue()
将单个QJsonObject
值转换为QJSValue
,然后将它们连接到QJSValueList
..,并调用func
将它们追加到一个QJSValue
中。我不确定这是否是您应该做的正确的事情,因为您可以直接将QJSValue作为对象获取,
或QJSValue数组:
njthzxwz3#
就像QJSEngine::toScriptValue(const T &)一样简单。
T
必须是QJsonObject
或QJsonArray
,而不是QJsonDocument
。