![]() |
|
|
![]()
|
|
| raks123 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 2.10.2011 Репутация: нет Всего: нет |
Есть такая задача: передаем строку в скрипт, а выводим из него численный массив. Я делаю так:
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 ()...; И выводит следующее: Вот тут я и застрял, так как дальнейшее преобразование у меня просто не получается, да и в теле функции оно будет лишнее. Нужна помощь в переписании самого скрипта и получении из него только значений в массив, а не бесполезной кучи, которую надо преобразовывать. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
Напиши ручками цикл, который выведет массив в нужном виде.
|
|||
|
||||
| raks123 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 2.10.2011 Репутация: нет Всего: нет |
Нашел решение))) скрипт остался таким же, а основную функцию пришлось подправить:
QScriptValue variant; engine.evaluate(contents); QScriptValue add = engine.globalObject().property("add"); variant = add.call(QScriptValue(), QScriptValueList() << stroka ); QScriptValueIterator it(variant); while(it.hasNext()){ it.next(); if (!(it.flags() && QScriptValue::SkipInEnumeration)) { qDebug()<<it.name()<<": " <<it.value().toInteger(); } } Наконец то начало выводить следующее: "0" : 1 "1" : 2 "2" : 3 "3" : 4 "4" : 5 "5" : 1 "6" : 2 "7" : 3 |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |