Russian Qt Forum

Qt => Qt Script, QtWebKit => Тема начата: AlexEx от Декабрь 05, 2013, 10:35



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


Название: Re: Как подружить QDomDocument и Qt Script?
Отправлено: AlexEx от Декабрь 16, 2013, 10:48
Решено. Если кому-то будет интересно - пишите в личку.


Название: Re: Как подружить QDomDocument и Qt Script?
Отправлено: Figaro от Декабрь 17, 2013, 17:35
Да многим интересно... Просто выложи минимально работающий код..


Название: Re: Как подружить QDomDocument и Qt Script?
Отправлено: Bepec от Декабрь 17, 2013, 17:57
Насколько я помню там просто метод есть для передачи экземпляра класса в скрипт. Давно дело было, так что минималка была бы кстати :)


Название: Re: Как подружить QDomDocument и Qt Script?
Отправлено: AlexEx от Декабрь 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 (https://code.google.com/p/qtscriptgenerator/issues/detail?id=81)). После исправления ошибки все работает.


Название: Re: Как подружить QDomDocument и Qt Script?
Отправлено: Figaro от Декабрь 20, 2013, 14:34
Thnx