Название: HowTo: Использование Qt Script Generator Отправлено: asvil от Июль 22, 2010, 23:45 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 2. Читаем readme и компилируем: Код: cd generator 3. Запускаем созданный на предыдущем шаге Кугенератор без параметров для генерации системы классов-оберток. Система классов-оберток - это система позволяющая использовать c++ классы в Qt Script. В последствие мы будем генерировать данную систему для своих классов. Код: ./generator 4. Переходим в каталог с заготовленными Qt проектам для компиляции систем классов-оберток. Код: cd ../qtbindings 5. Если ваша сборка Qt содержит все модули можно сделать: Код: qmake && make Код: cd qtscript_core 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 2. Создаем необходимые папки. Код: mkdir lib 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 (http://doc.qt.nokia.com/qtjambi-4.4/html/com/trolltech/qt/qtjambi-typesystem.html) Теперь запускаем процесс генерации проекта и затем компилируем полученные классы-обертки: Код: cmake buildplugin -DCMAKE_BUILD_TYPE=Release Следите за генерацией классов. Кугенератор предупреждает о том, какие перечисления, члены, методы класса он не смог экспортировать. Перечисления чаще всего просто не добавлены в файл plugin_typesystem.xml.in, а члены и методы содержат в себе неизвестные типы, т.е. типы которые не представлены в вышеназванном файле. Полученный Qt Script плагин можно найти в папке plugins/script и поступить с ним также, как поступали выше. Для некоторых билиотек созданы соответсвующие ветки: log4qt, ncreport252, qserialdevice. Переключившись на данные ветки необходимо только скопировать заголовочные файлы и саму библиотеку. Например: Код: git branch --track origin/qserialdevice |