由于QJSValue上的qt文档,QJsonObject不能隐式转换为QJSValue,我想用C中的QJSEngine调用javascript函数,参数应与QList<QJsValue>一起传递以调用另一个,其中包含函数本身。问题是我的参数之一是QJSValue,直到现在我应该将其转换为文本,然后调用并将其传递给javascript函数,该函数调用QJsonObject将其转换为对象,我正在寻找一种解决方案,让我在C ++中将JSON.parse转换为QJsonObject并使用对象参数而不是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这样的函数: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); (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 我有一个类似的问题。我开始沿着仅从QJsonValue递归地走树并从中建立QJSValue的道路走。QJSValue Convert(QJSEngine* engine, const QJsonValue& val){ if (val.isBool()) { return QJSValue(val.toBool()); } else if (val.isString()) { return QJSValue(val.toString()); } else if (val.isDouble()) { return QJSValue(val.toDouble()); } else if (val.isNull()) { return QJSValue(QJSValue::NullValue); } else if (val.isUndefined()) { return QJSValue(QJSValue::UndefinedValue); } else if (val.isObject()) { QJsonObject obj = val.toObject(); QJSValue newobj = engine->newObject(); for (auto itor = obj.begin(); itor != obj.end(); itor++) { QString key = itor.key(); QJsonValue value = itor.value(); QJSValue convertedValue = Convert(engine, value); newobj.setProperty(key, convertedValue); } return newobj; } else if (val.isArray()) { QJsonArray arr = val.toArray(); QJSValue newobj = engine->newArray(arr.size()); for (int i = 0; i < arr.size(); i++) { QJsonValue value = arr[i]; QJSValue convertedValue = Convert(engine, value); newobj.setProperty(i, convertedValue); } return newobj; } // ASSERT(FALSE && "This shouldn't happen"); return QJSValue(QJSValue::UndefinedValue);}在上面的代码中,您可以传递QJsonObject或任何其他类型的JSON节点以转换为QJSValue。我目前正在使用更接近您原始解决方案的方法-只需从引擎调用JSON.parse:QJSValue func = engine->evaluate("JSON.parse");QJSValueList args;args.append(jsonText); // jsonText is a QString or QJSValue stringQJSValue result = func.call(args);return result; (adsbygoogle = window.adsbygoogle || []).push({});
07-26 00:44