Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: gil9red от Апрель 10, 2014, 09:22



Название: Сборка QtScriptGenerator
Отправлено: gil9red от Апрель 10, 2014, 09:22
Скачал из репозитория (https://qt.gitorious.org/qt-labs/qtscriptgenerator/source/a6ce3887b49ee26a301d2921bbb00faa965fd49d:).
Инструкция:
Цитировать
Qt Script Generator labs package, version 0.2

The Qt Script Generator is a tool that generates Qt bindings for Qt Script.

---

Instructions:

1) Build the generator: cd path/to/this/project/generator, qmake && make

2) Run the generator (without arguments)
   This will generate C++ files in path/to/this/project/generated_cpp
   and documentation in path/to/this/project/doc

3) Build the bindings plugins: cd path/to/this/project/qtbindings, qmake && make
   The plugins will be put under path/to/this/project/plugins

4) To use the plugins in your application, add the plugins path to the library paths
   (QCoreApplication::setLibraryPaths()), then call QScriptEngine::importExtension()
   (plugin keys are "qt.core", "qt.gui", etc).

There is a simple script interpreter / launcher in path/to/this/project/qtbindings/qs_eval
that imports all the bindings. You can use it to run the examples found in
path/to/this/project/examples. E.g., with the examples directory being the working directory:

../qtbindings/qs_eval/qs_eval CollidingMice.js


See the generated doc/index.html for more information.

Have fun!
Первый пункт - сборка генератора прошла успешно.
А вот во втором остановился и не ясно что делать :(


Название: Re: Сборка QtScriptGenerator
Отправлено: Mikhail от Апрель 10, 2014, 11:53
Если не ошибаюсь это было актуально для Qt 4. В свое время использовал.


Название: Re: Сборка QtScriptGenerator
Отправлено: AlexEx от Апрель 10, 2014, 13:48
М.б. проблема в QtCreator 3.0.1. Помнится, под 2.6 собирался без проблем.


Название: Re: Сборка QtScriptGenerator
Отправлено: gil9red от Апрель 10, 2014, 14:56
Так ведь, компилится нормально, проблемы возникают при запуске генератора. Я и из консоли запускал генератор - тот же результат, что и под запуском из креатора
Т.е. запускается генератор без параметров (как в инструкции) и появляются ошибки при парсинге файла генератора (в файле описано, что нужно генерировать)


Название: Re: Сборка QtScriptGenerator
Отправлено: gil9red от Апрель 12, 2014, 17:22
Есть идеи в чем проблема? :) Может кто то с подобной ошибкой встречался?


Название: Re: Сборка QtScriptGenerator
Отправлено: gil9red от Апрель 16, 2014, 22:29
Я не одинок со своей проблемой. Только вот и тут нет ответа :(
http://comments.gmane.org/gmane.comp.lib.qt.general/42718


Название: Re: Сборка QtScriptGenerator
Отправлено: gil9red от Апрель 16, 2014, 23:23
Подправив код генератора смог продвинуться, теперь ошибки такие:

Please wait while source files are being generated...
WARNING(MetaJavaBuilder) :: ClassGenerator: no java classes, skipping
WARNING(MetaJavaBuilder) :: ShellImplGenerator: no java classes, skipping
WARNING(MetaJavaBuilder) :: ShellHeaderGenerator: no java classes, skipping
WARNING(MetaJavaBuilder) :: Generator: no java classes, skipping
Classes in typesystem: 0
Generated:
  - classes...: 0 (0)
  - header....: 0 (0)
  - impl......: 0 (0)
  - modules...: 0 (0)
  - pri.......: 0 (0)

Done, 4 warnings (1116 known issues)


Название: Re: Сборка QtScriptGenerator
Отправлено: Bepec от Апрель 16, 2014, 23:38
Ты правки приводи) Кто нить захочет помочь - будет продолжать твоё дело, а не с начала начинать.


Название: Re: Сборка QtScriptGenerator
Отправлено: gil9red от Апрель 16, 2014, 23:39
Ты правки приводи) Кто нить захочет помочь - будет продолжать твоё дело, а не с начала начинать.
Как раз собирался :)
Исправил последний баг (все оказалось очень просто) и получил вот такой во лог:
Код:
Please wait while source files are being generated... 
WARNING(MetaJavaBuilder) :: enum 'QGraphicsItem::PanelModality' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: enum 'QTextDocument::Stacks' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: enum 'QStyle::RequestSoftwareInputPanel' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: Unable to decide type of property: 'Qt::InputMethodHints' in class 'QWidget'
WARNING(MetaJavaBuilder) :: Unable to decide type of property: 'SoftKeyRole' in class 'QAction'
WARNING(MetaJavaBuilder) :: Unable to decide type of property: 'Priority' in class 'QAction'
WARNING(MetaJavaBuilder) :: enum 'QAction::Priority' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: enum 'QAction::SoftKeyRole' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: enum 'QXmlStreamReader::ReadElementTextBehaviour' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: enum 'QDataStream::FloatingPointPrecision' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: enum 'QPainter::PixmapFragmentHint' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: enum 'QGradient::InterpolationMode' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: Unable to decide type of property: 'QEasingCurve' in class 'QTimeLine'
WARNING(MetaJavaBuilder) :: enum 'Qt::GestureType' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: enum 'Qt::GestureFlag' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: enum 'Qt::GestureState' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: enum 'Qt::CoordinateSystem' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: enum 'Qt::TileRule' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: enum 'Qt::Initialization' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: enum 'Qt::AnchorPoint' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: enum 'Qt::NavigationMode' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: enum 'Qt::InputMethodHint' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: enum 'Qt::TouchPointState' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: enum 'QtValidLicenseForOpenVGModule' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: enum 'QtValidLicenseForDeclarativeModule' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: enum 'enum_2' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: enum 'enum_3' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: enum 'QtValidLicenseForMultimediaModule' does not have a type entry or is not an enum
WARNING(MetaJavaBuilder) :: class 'QGraphicsWidget' inherits from unknown base class 'QGraphicsObject'
WARNING(MetaJavaBuilder) :: class not found for setup inheritance 'QGraphicsObject'
WARNING(MetaJavaBuilder) :: class 'QGraphicsTextItem' inherits from unknown base class 'QGraphicsObject'
QProgressBar.invertedAppearance() const mostly equal to QProgressBar.invertedAppearance()
QProgressBar.invertedAppearance() mostly equal to QProgressBar.invertedAppearance() const
QProgressBar.textDirection() const mostly equal to QProgressBar.textDirection()
QProgressBar.textDirection() mostly equal to QProgressBar.textDirection() const
QPainter.drawLines(const QVector<QLineF > & lines) mostly equal to QPainter.drawLines(const QVector<QLine > & lines)
QPainter.drawLines(const QVector<QPoint > & pointPairs) mostly equal to QPainter.drawLines(const QVector<QLine > & lines)
QPainter.drawLines(const QVector<QPointF > & pointPairs) mostly equal to QPainter.drawLines(const QVector<QLine > & lines)
QPainter.drawLines(const QVector<QLine > & lines) mostly equal to QPainter.drawLines(const QVector<QLineF > & lines)
QPainter.drawLines(const QVector<QPoint > & pointPairs) mostly equal to QPainter.drawLines(const QVector<QLineF > & lines)
QPainter.drawLines(const QVector<QPointF > & pointPairs) mostly equal to QPainter.drawLines(const QVector<QLineF > & lines)
QPainter.drawLines(const QVector<QLine > & lines) mostly equal to QPainter.drawLines(const QVector<QPoint > & pointPairs)
QPainter.drawLines(const QVector<QLineF > & lines) mostly equal to QPainter.drawLines(const QVector<QPoint > & pointPairs)
QPainter.drawLines(const QVector<QPointF > & pointPairs) mostly equal to QPainter.drawLines(const QVector<QPoint > & pointPairs)
QPainter.drawLines(const QVector<QLine > & lines) mostly equal to QPainter.drawLines(const QVector<QPointF > & pointPairs)
QPainter.drawLines(const QVector<QLineF > & lines) mostly equal to QPainter.drawLines(const QVector<QPointF > & pointPairs)
QPainter.drawLines(const QVector<QPoint > & pointPairs) mostly equal to QPainter.drawLines(const QVector<QPointF > & pointPairs)
QPainter.drawRects(const QVector<QRectF > & rectangles) mostly equal to QPainter.drawRects(const QVector<QRect > & rectangles)
QPainter.drawRects(const QVector<QRect > & rectangles) mostly equal to QPainter.drawRects(const QVector<QRectF > & rectangles)
QPainter.drawLines(const QVector<QLineF > & lines) mostly equal to QPainter.drawLines(const QVector<QLine > & lines)
QPainter.drawLines(const QVector<QPoint > & pointPairs) mostly equal to QPainter.drawLines(const QVector<QLine > & lines)
QPainter.drawLines(const QVector<QPointF > & pointPairs) mostly equal to QPainter.drawLines(const QVector<QLine > & lines)
QPainter.drawLines(const QVector<QLine > & lines) mostly equal to QPainter.drawLines(const QVector<QLineF > & lines)
QPainter.drawLines(const QVector<QPoint > & pointPairs) mostly equal to QPainter.drawLines(const QVector<QLineF > & lines)
QPainter.drawLines(const QVector<QPointF > & pointPairs) mostly equal to QPainter.drawLines(const QVector<QLineF > & lines)
QPainter.drawLines(const QVector<QLine > & lines) mostly equal to QPainter.drawLines(const QVector<QPoint > & pointPairs)
QPainter.drawLines(const QVector<QLineF > & lines) mostly equal to QPainter.drawLines(const QVector<QPoint > & pointPairs)
QPainter.drawLines(const QVector<QPointF > & pointPairs) mostly equal to QPainter.drawLines(const QVector<QPoint > & pointPairs)
QPainter.drawLines(const QVector<QLine > & lines) mostly equal to QPainter.drawLines(const QVector<QPointF > & pointPairs)
QPainter.drawLines(const QVector<QLineF > & lines) mostly equal to QPainter.drawLines(const QVector<QPointF > & pointPairs)
QPainter.drawLines(const QVector<QPoint > & pointPairs) mostly equal to QPainter.drawLines(const QVector<QPointF > & pointPairs)
QPainter.drawRects(const QVector<QRectF > & rectangles) mostly equal to QPainter.drawRects(const QVector<QRect > & rectangles)
QPainter.drawRects(const QVector<QRect > & rectangles) mostly equal to QPainter.drawRects(const QVector<QRectF > & rectangles)
QPixmapCache.find(const QString & key, QPixmap * pixmap) mostly equal to QPixmapCache.find(const QString & key, QPixmap & pixmap)
QPixmapCache.find(const QString & key, QPixmap & pixmap) mostly equal to QPixmapCache.find(const QString & key, QPixmap * pixmap)
QFuture.QFuture(const QFuture & otheWARNING(MetaJavaBuilder) :: duplicate enum values: QDataStream::Version, Qt_4_7 and Qt_4_6 are 12, already rejected: (Qt_4_1, Qt_4_5)
WARNING(MetaJavaBuilder) :: duplicate enum values: Qt::Modifier, SHIFT and META are 0, already rejected: ()
WARNING(MetaJavaBuilder) :: duplicate enum values: Qt::Modifier, CTRL and META are 0, already rejected: ()
WARNING(MetaJavaBuilder) :: duplicate enum values: Qt::Modifier, ALT and META are 0, already rejected: ()
WARNING(MetaJavaBuilder) :: duplicate enum values: Qt::Modifier, MODIFIER_MASK and META are 0, already rejected: ()
WARNING(MetaJavaBuilder) :: duplicate enum values: Qt::Modifier, UNICODE_ACCEL and META are 0, already rejected: ()
WARNING(MetaJavaBuilder) :: duplicate enum values: Qt::MouseButton, MiddleButton and MidButton are 4, already rejected: ()
WARNING(MetaJavaBuilder) :: unhandled enum value: static_cast<Qt::MatchFlags>(Qt::MatchExactly in Qt::MatchFlag
WARNING(MetaJavaBuilder) :: unhandled enum value: Qt::MatchCaseSensitive) in Qt::MatchFlag
WARNING(MetaJavaBuilder) :: unmatched enum static_cast<Qt::MatchFlags>(Qt::MatchExactly|Qt::MatchCaseSensitive) when parsing default value of 'findData' in class 'QComboBox'
WARNING(MetaJavaBuilder) :: unmatched enum static_cast<Qt::MatchFlags>(Qt::MatchExactly|Qt::MatchCaseSensitive) when parsing default value of 'findText' in class 'QComboBox'
r) mostly equal to QFuture.QFuture(const QFuture & other)
QFuture.QFuture(const QFuture & other) mostly equal to QFuture.QFuture(const QFuture & other)
QFuture.QFuture(const QFuture & other) mostly equal to QFuture.QFuture(const QFuture & other)
QFuture.QFuture(const QFuture & other) mostly equal to QFuture.QFuture(const QFuture & other)
Classes in typesystem: 406
Generated:
  - classes...: 394 (394)
  - header....: 280 (280)
  - impl......: 280 (280)
  - modules...: 2 (2)
  - pri.......: 2 (2)

Done, 42 warnings (694 known issues)

Даже создались нужные папки и файлики, но я пока не испытывал их.


Название: Re: Сборка QtScriptGenerator
Отправлено: gil9red от Апрель 16, 2014, 23:50
Как происходит работа генератора? Просто - когда при запуске нет параметров, он использует сборку build_all:
QString default_system = ":/trolltech/generator/build_all.txt";
Как вы видите это файлик, а точнее xml, в котором описывается какие xml файлы с конкретной сборкой нужно сгенерировать (core, gui, sql и прочие модули Qt)
Этот файлик находится в ресурсах, а также в ресурсах находятся файлики, которые он будет генерировать.

build_all.txt:
Код:
<typesystem>
  <load-typesystem name="typesystem_core.xml" generate="yes" />
  <load-typesystem name="typesystem_gui.xml" generate="yes" />
  <load-typesystem name="typesystem_sql.xml" generate="yes" />
  <load-typesystem name="typesystem_opengl.xml" generate="yes" />
  <load-typesystem name="typesystem_svg.xml" generate="yes" />
  <load-typesystem name="typesystem_network.xml" generate="yes" />
  <load-typesystem name="typesystem_xml.xml" generate="yes" />
  <load-typesystem name="typesystem_phonon.xml" generate="yes" />
  <load-typesystem name="typesystem_webkit.xml" generate="yes" />
  <load-typesystem name="typesystem_xmlpatterns.xml" generate="yes" />
  <load-typesystem name="typesystem_uitools.xml" generate="yes" />
</typesystem>

Ошибка возникала из-за путей к typesystem_*.xml, добавив к ним префикс файлика ресурсов (:/trolltech/generator/) -> <load-typesystem name=":/trolltech/generator/typesystem_core.xml" generate="yes" /> парсер будет находить файлик в ресурсах и парсить его - ура!

В main.cpp есть также строчка QString pp_file = ".preprocessed.tmp"; думаю, будет ясно, что этот файл не найдется никогда, только если не добавить его в ресурсы (он кст лежит в папке с исходниками генератора) и не забыть бы указать префикс.
Если не подредактировать его, то будет такое вываливаться в лог:
Подправив код генератора смог продвинуться, теперь ошибки такие:

Please wait while source files are being generated...
WARNING(MetaJavaBuilder) :: ClassGenerator: no java classes, skipping
WARNING(MetaJavaBuilder) :: ShellImplGenerator: no java classes, skipping
WARNING(MetaJavaBuilder) :: ShellHeaderGenerator: no java classes, skipping
WARNING(MetaJavaBuilder) :: Generator: no java classes, skipping
Classes in typesystem: 0
Generated:
  - classes...: 0 (0)
  - header....: 0 (0)
  - impl......: 0 (0)
  - modules...: 0 (0)
  - pri.......: 0 (0)

Done, 4 warnings (1116 known issues)



Вот и все, в чем смог разобраться :)


Название: Re: Сборка QtScriptGenerator
Отправлено: Bepec от Апрель 16, 2014, 23:54
Таки работает или таки не работает? :D


Название: Re: Сборка QtScriptGenerator
Отправлено: panAlexey от Апрель 22, 2016, 10:20
А я бы пощупал бы.
Есть у кого-нить собранная версия?
Можете намылить?


Название: Re: Сборка QtScriptGenerator
Отправлено: gil9red от Апрель 22, 2016, 12:21
Я тогда, похоже обошелся QScriptEngine :)
гуглением нашел даже кое-что из проекта

Вот: https://github.com/gil9red/NotesManager/tree/master/ScriptModule
Для подсветки использовал QScintilla

Найденный пример (https://github.com/gil9red/NotesManager/blob/90864c80674bdd88540eed9147b9c58d34fc355b/ScriptModule/scriptsmanager.cpp) использования:
Код
C++ (Qt)
void ScriptsManager::runScript( const QString & script )
{
   const QString & result = Script::ScriptEngine::instance()->evaluate( script ).toString();
   ui->lEditLog->setText( result );
}
 

Проект можно и не собирать -- там довольно мудрено было, может не получиться :)


Название: Re: Сборка QtScriptGenerator
Отправлено: panAlexey от Апрель 22, 2016, 16:01
Жаль, не помешал бы знакомый скриптовый двиг в системе.