首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >QJSEngine不会正确计算js数组

QJSEngine不会正确计算js数组
EN

Stack Overflow用户
提问于 2018-09-30 05:00:46
回答 1查看 244关注 0票数 -1

我有一个settings.js文件,其中包含一个具有设置数组的数组:

代码语言:javascript
复制
[
// [property, section, hex-address, Bytes to read/write, type, lsb, msb, options]

    ["AEC Control" , "AEC Control", 0x10300, 4, "bool", 0, 0],
    ["Shutter Mode", "Sensor Mode", 0x10104, 4, "bool", 0, 0],
    ["Nb ADC", "Sensor Mode", 0x10108, 4, "bool", 0, 0],
    ...
]

如您所见,该文件只包含数组的值,没有赋值给变量,末尾也没有分号。

settings.js放入resources.qrc

代码语言:javascript
复制
<RCC>
    <qresource prefix="/js">
        <file alias="CameraSettings">resources/settings.js</file>
    </qresource>
</RCC>

我和QFile一起读了settings.js。下面是对javascript求值的代码:

代码语言:javascript
复制
QFile cameraSettingsJsFile(":/js/CameraSettings");
if(!cameraSettingsJsFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
    throw std::exception("CameraSettingsProperties-file not valid!");
};

QJSEngine jsengine;
std::cout << "Output: '" << QTextStream(&cameraSettingsJsFile).readAll().toStdString() << "';" << std::endl;
QJSValue settingsArrayJSValue = jsengine.evaluate(QTextStream(&cameraSettingsJsFile).readAll());

因为有了Output行,我知道文件是正确读取的,但是QJSEngine不会正确地计算这个值。因为settingsArrayJSValue.isArray()的计算结果是false,所以我在settingsArrayJSValue上调用了所有的is...()函数。只有settingsArrayJSValue.isUndefined()计算结果为true

我还尝试了这个:

代码语言:javascript
复制
jsengine.evaluate("x=" + QTextStream(&cameraSettingsJsFile).readAll() + ";");

然后,settingsArrayJSValue.isObject()的计算结果为true (在谈到js世界时,这在某种程度上是意料之中的),但我也得到了一个SyntaxErrorExpected token 'numeric literal'

我在这里的最终目标是解析setttings数组。因此,我希望对求值的数组执行JSON.stringify操作,并使用Qt QJson类:

代码语言:javascript
复制
QJSValueList stringifyArguments;
stringifyArguments.append(settingsArrayJSValue);
QString evaluationResultString = jsengine
    .evaluate(QString("JSON.stringify"))
    .call(stringifyArguments)
    .toString();

QJsonArray jsonCameraSettingsArray = 
QJsonDocument::fromJson(evaluationResultString.toUtf8()).array();

为什么QJSEngine计算有效数组的值为undefined

怎样才能让QJSEngine正确地评估数组,以便我可以进一步处理它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-30 05:44:35

问题出在这一行:

代码语言:javascript
复制
std::cout << "Output: '" << QTextStream(&cameraSettingsJsFile).readAll().toStdString() << "';" << std::endl;

因为我在那里读取了文件,所以当第二次尝试从cameraSettingsJsFile读取时,QTextStream(&cameraSettingsJsFile).readAll()将是一个空字符串,因为指针移动到了流的末尾。

所以QJSEngine工作得很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52572507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档