| 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, () ) )
 
 Вот тут я и застрял, так как дальнейшее преобразование у меня просто не получается, да и в теле функции оно будет лишнее. Нужна помощь в переписании самого скрипта и получении из него только значений в массив, а не бесполезной кучи, которую надо преобразовывать.
 |