for (int i = 0; i < centerPointsList.size (); i++)
{
QVariant holdInformation = map->page ()->mainFrame ()->evaluateJavaScript (QString ("constructFileName (%1).arg (centerPointsList[0].toFloat())"));
QList <QVariant> allListObj = holdInformation.toList ();
QList <QVariant> fileNamesList = allListObj[0].toList ();
std :: cout << fileNamesList[0].toFloat() << "================= \n";
}
Это приводит к:
«SyntaxError: Ошибка разбора в строке: 1 Источник: не определено»
Ошибка сегментации
Я предполагаю, что ошибка в том, как я передаю элемент списка в функцию evaluateJavaScript
,
ОБНОВИТЬ:
Я попробовал это:
for (int i = 0; i < centerPointsList.size (); i++)
{
QVariant holdInformation = map->page ()->mainFrame ()->evaluateJavaScript (QString ("constructFileName (%1)").arg (centerPointsList [0].toFloat ()));
что привело к:
«TypeError: Результат выражения ‘centerPointFileName.split’ [undefined] не является функцией. On line: 65 Источник: file: ///…/index.html»
Функция constructFileName
(в Javascript) выглядит следующим образом:
function constructFileName (centerPointFileName)
{
var removeSpaces = centerPointFileName.split (" ");
var fileNameWithoutSpaces = "", i;
for (i = 0; i < removeSpaces.length; i++)
fileNameWithoutSpaces = fileNameWithoutSpaces + removeSpaces [i];
Согласно вашему обновлению, ваша функция JavaScript ожидает строковый аргумент. Самый простой подход должен выглядеть так:
QString info = QString("constructFileName('%1')").arg(centerPointsList[i].toFloat());
QVariant holdInformation = map->page()->mainFrame()->evaluateJavaScript(info);
Тем не менее, в целом это не совсем безопасно — если интерполированный аргумент %1
содержит обратную косую черту, двойные кавычки или другие специальные символы, их нужно сначала экранировать. Я не могу комментировать, как это должно быть сделано, так как я никогда не работал с Qt 🙂
Других решений пока нет …