Raks123
Гость
|
|
« : Октябрь 02, 2011, 18:29 » |
|
Есть такая задача: передаем строку в скрипт, а выводим из него численный массив. Я делаю так:
QScriptEngine engine;
QString fileName(":/script.js"); QFile scriptFile(fileName); scriptFile.open(QIODevice::ReadOnly); QTextStream stream(&scriptFile); QString contents = stream.readAll(); scriptFile.close();
- Ну тут все понятно, открываем скрипт. читаем и обозначиваем объект движка
QString stroka ("12345123");
- Вот строка. взял её так просто, нужно понять принцип, а потом усложнять
QScriptValue add = engine.globalObject().property("add");
Я завожу глобальный объект, который после будет обращаться в скрипт по имени функции
QDebug () <<add.call (QScriptValue (), QScriptValueList () <<stroka) toVariant ().
Вот я вызываю функцию и передаю строку в скрипт. Ниже простой скрипт:
function add(stroka) { arr = Array;
for (i=0; typeof(stroka)!=="undefined"; i=i+1){ arr=stroka; } return arr; }
Дело в том, что выводит следующее:
QVariant(QVariantMap, QMap(("0", QVariant(QString, "1") ) ( "1" , QVariant(QString, "2") ) ( "2" , QVariant(QString, "3") ) ( "3" , QVariant(QString, "4") ) ( "4" , QVariant(QString, "5") ) ( "5" , QVariant(QString, "1") ) ( "6" , QVariant(QString, "2") ) ( "7" , QVariant(QString, "3") ) ( "isArray" , QVariant(QVariantMap, QMap(("length", QVariant(double, 1) ) ( "name" , QVariant(QString, "isArray") ) ) ) ) ( "length" , QVariant(double, 1) ) ( "name" , QVariant(QString, "Array") ) ( "prototype" , QVariant(QVariantList, () ) ) ) )
Я дописывал в строку toMap (). - QDebug () <<add.call (QScriptValue (), QScriptValueList () <<stroka) toVariant () toMap ()..; и начало выводить следующее:
QMap(("0", QVariant(QString, "1") ) ( "1" , QVariant(QString, "2") ) ( "2" , QVariant(QString, "3") ) ( "3" , QVariant(QString, "4") ) ( "4" , QVariant(QString, "5") ) ( "5" , QVariant(QString, "1") ) ( "6" , QVariant(QString, "2") ) ( "7" , QVariant(QString, "3") ) ( "isArray" , QVariant(QVariantMap, QMap(("length", QVariant(double, 1) ) ( "name" , QVariant(QString, "isArray") ) ) ) ) ( "length" , QVariant(double, 1) ) ( "name" , QVariant(QString, "Array") ) ( "prototype" , QVariant(QVariantList, () ) ) )
Я посмотрел еще упрощение и дописал значения (). - QDebug () <<add.call (QScriptValue (), QScriptValueList () <<stroka) toVariant () toMap () values ()...; И выводит следующее:
(QVariant(QString, "1") , QVariant(QString, "2") , QVariant(QString, "3") , QVariant(QString, "4") , QVariant(QString, "5") , QVariant(QString, "1") , QVariant(QString, "2") , QVariant(QString, "3") , QVariant(QVariantMap, QMap(("length", QVariant(double, 1) ) ( "name" , QVariant(QString, "isArray") ) ) ) , QVariant(double, 1) , QVariant(QString, "Array") , QVariant(QVariantList, () ) )
Вот тут я и застрял, так как дальнейшее преобразование у меня просто не получается, да и в теле функции оно будет лишнее. Нужна помощь в переписании самого скрипта и получении из него только значений в массив, а не бесполезной кучи, которую надо преобразовывать.
|