HowTo:Использование Qt Script Generator (В рамках программы "Qt Script у кожную хату")QtScriptGenerator (далее - Кугенератор) позволяет сделать доступным почти любой Qt или Qt-подобный класс в среде Qt Script.
Приступим:
1. Скачиваем исходный код qtscriptgenerator из моего репозитория:
git clone git@gitorious.org:~asvil/qt-labs/asvils-qtscriptgenerator.git qtscriptgenerator
cd qtscriptgenerator
2. Читаем readme и компилируем:
cd generator
qmake && make
3. Запускаем созданный на предыдущем шаге Кугенератор без параметров для генерации системы классов-оберток. Система классов-оберток - это система позволяющая использовать c++ классы в Qt Script. В последствие мы будем генерировать данную систему для своих классов.
4. Переходим в каталог с заготовленными Qt проектам для компиляции систем классов-оберток.
5. Если ваша сборка Qt содержит все модули можно сделать:
Иначе переходите в каталоги с названиями необходимых модулей и компилируйте:
cd qtscript_core
qmake && make
6. Полученные плагины-расширения для Qt Script располагаются в папке qtscriptgenerator/plugins/script. Необходимо папку 'script' с содержимым поместить рядом с исполняемым файлом вашего проекта или указать местоположения плагинов вызвав QCoreApplication::addLibraryPath();
7. В своем проекте после создания QScriptEngine вызвать QScriptEngine::importExtension("qt.core"), используя в качестве параметра нужный модуль.
* * *
Теперь давайте используем Кугенератор для своих личных классов используя CMake систему сборки. Предполагается, что классы скопилированы в библиотеку. Общий метод такой:
1. Скачиваем qtscripttemplate в ту же папку, где храниться Кугенератор.
git clone git@gitorious.org:qtscripttemplate/qtscripttemplate.git
cd qtscripttemplate
2. Создаем необходимые папки.
3. В папку 'lib' копируем библиотеку. В папку 'include' заголовочные файлы библиотеки.
4. Настраиваем систему сборки, а таке систему генерируемых Кугенератором классов. Для этого:
- Открываем buildplugin/CMakeLists.txt
- Создаем переменную с имененм проекта:
set (PROJECT YOUR_SCRIPT_PLUGIN_NAME)
- Создаем переменную с именем Qt Script расширения. Данное имя будет в последствие использоваться методом QScriptEngine::importExtension();
set (QS_PACKAGE_NAME YOUR_PACKAGE_NAME)
- Находим строку: set(QT_USE_QTSCRIPT TRUE) и после нее вводим в данном стиле список используемых вашей библиотекой Qt модулей. Например, set(QT_USE_QTNETWORK TRUE) и т.д.
- Далее переходим к редактированию файла plugin_build.txt.in и снимаем комменатрий с используемых библиотекой Qt модулей.
Теперь мы будем настраивать систему классов экспортируемых библиотекой. Для этого:
- Открываем файл plugin_typesystem.xml.in и перечисляем экспортируемые классы, перечисления, пространствы имен с помощью соответсвующих тегов с атрибутами:
Пространство имен:
<namespace-type name="YourNamespace"/>
Перечисление:
<enum-type name="Namespace::SomeEnum"/> или <enum-type name="SomeClass::SomeEnum"/>
Имеющий предка QObject и макрос Q_OBJECT:
<object-type name="QObjectSubclass"/>
Не имеющий предка QObject, но имеющие конструктор копии и оператор присваивания:
<value-type name="NonQObjectClass"/>
Подробнее об этих тегах и их использовании можно узнать перейдя по данной ссылке:
http://doc.qt.nokia.com/qtjambi-4.4/html/com/trolltech/qt/qtjambi-typesystem.htmlТеперь запускаем процесс генерации проекта и затем компилируем полученные классы-обертки:
cmake buildplugin -DCMAKE_BUILD_TYPE=Release
make
Следите за генерацией классов. Кугенератор предупреждает о том, какие перечисления, члены, методы класса он не смог экспортировать. Перечисления чаще всего просто не добавлены в файл plugin_typesystem.xml.in, а члены и методы содержат в себе неизвестные типы, т.е. типы которые не представлены в вышеназванном файле.
Полученный Qt Script плагин можно найти в папке plugins/script и поступить с ним также, как поступали выше.
Для некоторых билиотек созданы соответсвующие ветки: log4qt, ncreport252, qserialdevice. Переключившись на данные ветки необходимо только скопировать заголовочные файлы и саму библиотеку. Например:
git branch --track origin/qserialdevice
mkdir lib
mkdir include
......................
cmake biuldplugin -DCMAKE_BUILD_TYPE=Release
make