Russian Qt Forum
Май 18, 2024, 04:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как подружить QDomDocument и Qt Script?  (Прочитано 4880 раз)
AlexEx
Чайник
*
Offline Offline

Сообщений: 76


Просмотр профиля
« : Декабрь 05, 2013, 10:35 »

Задача такая: в C++ коде создается объект типа QDomDocument, в который вносятся некоторые начальные записи, затем этот объект отдается на обработку в js-скрипт и после обработки опять используется в C++ коде. С работой в коде C++ понятно, для работы с QDomDocument в скрипте с помощью Qt Script Generator сгенерированы и загружены расширения (qt.core, qt.xml). А вот как передать документ в скрипт (да еще так, чтобы с ним могли работать загруженные расширения) и получить его обратно, никак в толк не возьму.
Записан
AlexEx
Чайник
*
Offline Offline

Сообщений: 76


Просмотр профиля
« Ответ #1 : Декабрь 16, 2013, 10:48 »

Решено. Если кому-то будет интересно - пишите в личку.
Записан
Figaro
Гость
« Ответ #2 : Декабрь 17, 2013, 17:35 »

Да многим интересно... Просто выложи минимально работающий код..
Записан
Bepec
Гость
« Ответ #3 : Декабрь 17, 2013, 17:57 »

Насколько я помню там просто метод есть для передачи экземпляра класса в скрипт. Давно дело было, так что минималка была бы кстати Улыбающийся
Записан
AlexEx
Чайник
*
Offline Offline

Сообщений: 76


Просмотр профиля
« Ответ #4 : Декабрь 20, 2013, 14:29 »

Вот минимальный код:
Код:
QScriptEngine engine;
engine.installTranslatorFunctions();

// Загрузить расширения
QStringList extensions;
extensions << "qt.core" << "qt.xml";
foreach ( const QString & ext, extensions )
  {
  QScriptValue ret = engine.importExtension( ext );
  if ( ret.isError() )
    {
    // ...........
    }
  }

QScriptValue docObj = engine.evaluate( "new QDomDocument()" );
engine.globalObject().setProperty( "domdoc", docObj );
QDomDocument* pDoc = qscriptvalue_cast<QDomDocument*>( docObj );

// Теперь документ известен скрипту под именем domdoc

// Заполняем документ ...

// Выполнить сценарий (к этому моменту текст скрипта из файла 'fileName'
// уже лежит в QString 'content')
QScriptValue result = engine.evaluate( content, fileName );
if ( result.isError() )
  {
  // ...........
  }

// Обрабатываем полученное из скрипта
QScriptValue retDocObj = engine.globalObject().property( "domdoc" );
QDomDocument retDom = qscriptvalue_cast<QDomDocument>( retDocObj );
qDebug() << "retDom\n" << retDom.toString(); // !!!!!!!!!!!!!
Имеется проблемка в том, что Qt Script Generator содержит ошибку в части метода appendChild (https://code.google.com/p/qtscriptgenerator/issues/detail?id=81). После исправления ошибки все работает.
Записан
Figaro
Гость
« Ответ #5 : Декабрь 20, 2013, 14:34 »

Thnx
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.073 секунд. Запросов: 19.