JavaScript — QJSEngine не будет правильно оценивать массив js

У меня есть файл settings.js который включает в себя массив с массивами настроек:

[
// [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:

<RCC>
<qresource prefix="/js">
<file alias="CameraSettings">resources/settings.js</file>
</qresource>
</RCC>

Я прочитал settings.js с QFile, Вот код для оценки 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() оценивает ложный я позвонил всем is...() функции на settingsArrayJSValue, Только settingsArrayJSValue.isUndefined() оценивает правда.

Я также попробовал это:

jsengine.evaluate("x=" + QTextStream(&cameraSettingsJsFile).readAll() + ";");

затем settingsArrayJSValue.isObject() оценивает правда (что в некотором смысле ожидается, говоря о мире JS), но я также получаю SyntaxError: Expected token 'numeric literal',

Моя последняя цель — разобрать массив поселенцев. Поэтому я хочу JSON.stringify вычисляемый массив и работаем с Qt QJson классы:

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 правильно оценить массив, чтобы я мог обработать его дальше?

-2

Решение

Проблема была в этой строке:

std::cout << "Output: '" << QTextStream(&cameraSettingsJsFile).readAll().toStdString() << "';" << std::endl;

Потому что я читаю файл там, когда пытаюсь прочитать из cameraSettingsJsFile второй раз QTextStream(&cameraSettingsJsFile).readAll() будет пустой строкой, потому что указатель перемещен в конец потока.

Так что QJSEngine работает нормально …

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]