Официальный форум СВД Встраиваемые Системы
05 Декабря, 2016, 19:38:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1] 2 3 ... 7   Вниз
  Печать  
Автор Тема: Разработка на Qt для PlayBook  (Прочитано 16132 раз)
Евгений Горелов
Опытный пользователь

Сообщений: 192



WWW
« : 18 Ноября, 2011, 17:33:36 »

Компиляция библиотеки Qt с поддержкой BlackBerry Playbook

Необходимые компоненты:
- Установленный BlackBerry Native SDK (ссылка)
- Исходные тексты Qt для Playbook (репозиторий)

1. Скачайте исходные тексты Qt для Playbook из git-репозитория. Например, следующая команда создаст локальную копию репозитория в текущем каталоге:
Код:
git clone https://github.com/blackberry/Qt.git

2. Cоздайте скрипт playbook_qt.sh и добавьте в него следующие строки:
Код:
#!/bin/sh

EXTRAOPTS=-xmlpatterns

${NDK_PATH}/bbndk-env.sh
./configure-qsk arm v7le
make install

- переменная EXTRAOPTS позволяет передавать дополнительные опции конфигуратору Qt;
- ${NDK_PATH} замените на путь установки NDK.

3. Запустите сценарий на исполнение - библиотека Qt будет собрана с поддержкой NDK, по завершении сценария в каталоге Qt будет создан подкаталог stage.
4. Скопируйте содержимое каталога stage/nto в каталог NDK. Например:

cp -r stage/nto/* /opt/bbndk-1.0/target/target-override
   

Компиляция приложений Qt для BlackBerry Playbook

1. Запустите Momentics IDE для BlackBerry:

./bbndk.sh
   
2. Создайте проект "BlackBerry Tablet OS C/C++ Project"
3. Откройте файл bar-descriptor.xml и в графе Assets добавьте ссылки на модули Qt, которые будет использовать приложение. Они должны находиться в каталоге NDK, например:

${QNX_TARGET}/../target/target-override/${CPUVARDIR}/usr/lib/qt4/lib/libQtDeclarative.so.4.8.0
   
4. В Assets обязательно необходимо добавить модуль ${QNX_TARGET}/../target/target-override/${CPUVARDIR}/usr/lib/qt4/plugins/platforms/libblackberry.so, после его добавления измените значение графы 'Target Path' на:

platforms/libblackberry.so
   
После изменения путь должен отображаться как:
   
lib/platforms/libblackberry.so
   
5. Откройте свойства проекта, в левой колонке выберите C/C++ Build -> Settings.
6. В правом окне перейдите во вкладку Tool Settings, в списке выберите пункт QCC Linker -> Libraries
7. В список Library Paths добавьте путь к библиотекам Qt, например:

${QNX_TARGET}/../target/target-override/${CPUVARDIR}/usr/lib/qt4/lib
   
8. В список Libraries добавьте необходимые библиотеки, например:

  • QtCore
  • QtGui
  • QtScript
  • QtSvg
  • QtNetwork
  • QtSql
  • QtDeclarative
  • QtOpenGL

9. Выберите пункт QCC Compiler -> Preprocessor, в список Include Directories добавьте пути к необходимым заголовочным файлам модулей Qt, например:

${QNX_TARGET}/../target/target-override/usr/include/qt4/QtGui

10. Перейдите во вкладку Run -> Run Configurations..., выберите пункт BlackBerry Tablet OS C/C++ Application и создайте новый элемент, например playbook_qt.
11. Выберите новый элемент, перейдите на вкладку Arguments и текстовое поле введите параметры запуска:
Код:
-platform blackberry

12. Теперь можно собрать проект и запустить его на Playbook'е Cool

Данные действия я выполнял в Linux, для других платформ они идентичны за исключением путей BlackBerry NDK.
« Последнее редактирование: 03 Февраля, 2012, 14:19:08 от Евгений Горелов » Записан
Евгений Горелов
Опытный пользователь

Сообщений: 192



WWW
« Ответ #1 : 25 Ноября, 2011, 15:39:43 »

Как перенести готовое приложение, написанное на Qt/QML в Playbook?

Убедитесь, что вы:
- Собрали и подготовили дистрибутив Qt для Playbook (подробнее)
- Скачали исходные тексты приложения калькулятор.

Если все готово, тогда начнем  Smiley

1. Запустите Momentics IDE для BlackBerry и создайте проект "BlackBerry Tablet OS C/C++ Project".
2. Укажите пути к заголовочным файлам модулей, которые будут использоваться. В нашем случае это: QtCore, QtGui, QtDeclarative. Откройте свойства проекта, в левой колонке выберите C/C++ Build -> Settings. В правом окне перейдите во вкладку Tool Settings, в списке выберите пункт QCC Compiler -> Preprocessor, в список Include Directories добавьте пути:

Код:
${QNX_TARGET}/../target-override/usr/include/qt4
${QNX_TARGET}/../target-override/usr/include/qt4/QtCore
${QNX_TARGET}/../target-override/usr/include/qt4/QtGui
${QNX_TARGET}/../target-override/usr/include/qt4/QtDeclarative

3. Выберите пункт QCC Linker -> Libraries, в список Library Paths добавьте путь к библиотекам Qt:

Код:
${QNX_TARGET}/../target-override/${CPUVARDIR}/usr/lib/qt4/lib

4. В список Libraries добавьте библиотеки:

Код:
QtCore
QtGui
QtScript
QtSvg
QtNetwork
QtSql
QtDeclarative
QtOpenGL

5. Откройте файл bar-descriptor.xml и в графе Assets добавьте ссылки на модули Qt, которые будет использовать приложение:

Код:
${QNX_TARGET}/../target-override/${CPUVARDIR}/usr/lib/qt4/lib/libQtCore.so.4
                                                                                                                    libQtDeclarative.so.4
                                                                                                                    libQtOpenGL.so.4
                                                                                                                    libQtGui.so.4
                                                                                                                    libQtNetwork.so.4
                                                                                                                    libQtScript.so.4
                                                                                                                    libQtSql.so.4
${QNX_TARGET}/../target-override/${CPUVARDIR}/usr/lib/qt4/plugins/platforms/libblackberry.so
 *

* после добавления libblackberry.so измените значение графы 'Target Path' на: platforms/libblackberry.so

В этот же список необходимо добавить файлы приложения калькулятор:
Код:
/path/to/calculator/calculator.qml
                                   Core/Button.qml
                                   Core/calculator.js
                                   Core/Display.qml
                                   Core/qmldir
                                   Core/images/button-.png
                                   Core/images/button-blue.png
                                   Core/images/button-green.png
                                   Core/images/button-purple.png
                                   Core/images/button-red.png
                                   Core/images/display.png

/path/to/calculator замените на путь к каталогу с приложением

6. В проекте создайте файл исходных текстов main.cpp и заполните его следующим образом:
Код:
#include <QApplication>
#include <QMainWindow>
#include <QDeclarativeView>
#include <QDeclarativeEngine>
#include <QCoreApplication>

int main(int argc, char *argv[])
{
    QCoreApplication::addLibraryPath("app/native/lib");
    QApplication app(argc, argv);

    QDeclarativeView view;
    view.setSource(QUrl("app/native/calculator.qml"));

    QMainWindow w;
    w.setGeometry(view.geometry());
    w.setCentralWidget(&view);
    w.show();

    QDeclarativeEngine *engine = view.engine();
    app.connect(engine,SIGNAL(quit()),&app,SLOT(quit()));

    return app.exec();
}

Метод QCoreApplication::addLibraryPath используется для того, чтобы указать приложению путь к разделяемым библиотекам.

7. Откройте для  редактирования файл calculator.qml, замените следующие строки

Строку:
Код:
state: "orientation " + runtime.orientation

На:
Код:
state: "orientation Landscape"

Блок:
Код:
states: [
             State {
                 name: "orientation " + Orientation.Landscape
                 PropertyChanges { target: main; rotation: 90 + rotationDelta; width: main.baseHeight; height: main.baseWidth }
             },
             State {
                 name: "orientation " + Orientation.PortraitInverted
                 PropertyChanges { target: main; rotation: 180 + rotationDelta; }
             },
             State {
                 name: "orientation " + Orientation.LandscapeInverted
                 PropertyChanges { target: main; rotation: 270 + rotationDelta; width: main.baseHeight; height: main.baseWidth }
             }
]

На:
Код:
states: [
            State {
                name: "orientation Landscape"
                PropertyChanges { target: main; rotation: 90 + rotationDelta; width: main.baseHeight; height: main.baseWidth }
            }
]

8. Сохраните все изменения и соберите проект.

9. Теперь приложение готово к использованию на Blackberry Playbook  Smiley

Ниже вы можете скачать архив с проектом приложения или готовый к установке bar файл:

проект | приложение


Скриншоты:




« Последнее редактирование: 14 Февраля, 2012, 16:24:14 от Евгений Горелов » Записан
Евгений Горелов
Опытный пользователь

Сообщений: 192



WWW
« Ответ #2 : 13 Декабря, 2011, 09:45:28 »

Добавил скриншоты в первое сообщение.
Записан
Евгений Горелов
Опытный пользователь

Сообщений: 192



WWW
« Ответ #3 : 22 Декабря, 2011, 13:30:53 »

Объединил темы.
Записан
Mezomish
Интересующийся

Сообщений: 6


« Ответ #4 : 09 Января, 2012, 18:57:07 »

Небольшой апдейт: коммитом от 30 ноября 2011 года была убрана библиотека bbsupport. Она теперь не собирается при сборке Qt и не требуется при линковке и упаковке.

Ещё один момент: если ваше приложение не использует QtDeclarative, а использует нативный QtGui и вы желаете сэкономить на размере пакета, включая только необходимые модули (скажем, QtCore и QtGui), то в ассеты всё равно нужно добавить QtOpenGL, без неё приложение не запустится. Линковаться с ней не обязательно, нужно просто добавить в assets.

По состоянию на вчерашний день наблюдались проблемы с путями к шрифтам (при запуске приложения на девайсе оно пыталось найти шрифты по тому пути, где они лежат на хост-машине), так что, к сожалению, ничего не запускается. По крайней мере я пока не нашёл способа это побороть. Если у кого получится - сообщите, пожалуйста.
Записан
Евгений Горелов
Опытный пользователь

Сообщений: 192



WWW
« Ответ #5 : 09 Января, 2012, 20:48:00 »

Шрифты не цепляются, при сборке приложения из исходников или при запуске готового приложения?

QtGui и QtDeclarative при рисовании графики используют методы библиотеки QtOpenGL, поэтому она в любом случае необходима.
« Последнее редактирование: 09 Января, 2012, 20:55:38 от Евгений Горелов » Записан
Mezomish
Интересующийся

Сообщений: 6


« Ответ #6 : 09 Января, 2012, 21:14:34 »

Шрифты не цепляются при запуске. Приложение вроде бы стартует - появляется окно, дебаггер входит в main(), но потом вываливается с ошибкой в консоли
"QFontDatabase: Cannot find font directory $path_to_qt4_fonts_dir_on_host_machine - is Qt installed correctly?"

В общем, та же ситуация, что и здесь: http://developer.qt.nokia.com/forums/viewthread/9752
Там ответили, что есть какой-то параметр, который нужно передать, чтобы шрифты искались там, где надо, но я пока не разбирался, какой именно.

Использую NDK 1.0, снэпшот Qt - текущий, из основной ветки https://github.com/blackberry/Qt
Записан
Mezomish
Интересующийся

Сообщений: 6


« Ответ #7 : 10 Января, 2012, 17:45:19 »

Вчера после изучения исходников проблему с путями к шрифтам решил: нужно установить соответствующую переменную окружения, для чего в самое начало main() добавляем строку
Код:
qputenv("QT_QPA_FONTDIR", "/usr/fonts/font_repository/monotype");
Теперь вроде как запускается и не падает, однако показывает пустой экран, который не спешит показывать контролы (использую QtGui). Причём независимо от того, используется ли ndk 1.0 или же 2.0.

Есть ли какой-нибудь способ получить больше дебаг-информации в консоль? Ну, кроме пересборки самой Qt в дебаг-моде?

Кстати, вчера прилетел большой коммит, содержащий множество исправлений, в частности связанных с iconv (при конфигурировании не проходили некоторые тесты и конфигурирование аварийно завершалось), теперь конфигурится и собирается без проблем.
Записан
Олег Большаков
Администратор
Житель форума

Сообщений: 2931



WWW
« Ответ #8 : 10 Января, 2012, 18:07:01 »

Сами проекты Вы собираете с отладочной информацией? Запускаете приложения на планшете или на виртуальной машине?
Записан

azazello
Пользователь

Сообщений: 17



« Ответ #9 : 15 Января, 2012, 02:47:42 »

спасибо огромное за пошаговое описание сборок!
в начале написал (на  сборке 2.0.0.6149(планшет) и qt от 12.1.2012(6fdc2baf67d42154d1838b1e6fcc271fff488659) - не определялась система, как 'blackberry' (для platforms - по коду похоже, что  переменная окружения QT_QPA_PLATFORM приходит пустая - так и не понял, кто её выставляет) ), но шрифты(менюшные) работают нормально.)

а теперь - после пересборки полной та же проблема со шрифтами Sad - глянул файлы(старая сборка осталась) - libblackberry.so разные почему-то (заливка старой либы - меньшей - помогла - буду разбираться)
Код:
298556 Jan 14 22:35 libblackberry.so
766750 Jan 15 02:49 libblackberry.wrong.so
« Последнее редактирование: 15 Января, 2012, 04:30:06 от azazello » Записан
Mezomish
Интересующийся

Сообщений: 6


« Ответ #10 : 15 Января, 2012, 05:34:58 »

Сами проекты Вы собираете с отладочной информацией? Запускаете приложения на планшете или на виртуальной машине?

Собирал с дебагом, запускал на планшете.

Проблема оказалась в том, что начиная от ревизии codedrop_20111130 ввели зависимость от библиотеки libinput_client.so, и похоже, что она присутствует только в OS 2.0, так что совместимость с 1.0 сломана.
Разумеется, я буду рад ошибиться, и если у кого-то есть рабочий workaround как запустить на 1.0 приложение с последним Qt - буду счастлив услышать рабочую последовательность действий, но у меня так и не получилось.

Буду пробовать симулятор с 2.0, посмотрим, что получится.
Записан
Олег Большаков
Администратор
Житель форума

Сообщений: 2931



WWW
« Ответ #11 : 15 Января, 2012, 19:26:16 »

Скорее всего действительно идёт подготовка к выпуску второй прошивки и Qt сориентирован на неё. Во-первых, довольно часто обновляются исходники. Во-вторых, до выхода второй прошивки остался примерно месяц. Думаю, что сейчас стоит разрабатывать для второй беты, либо использовать более старый исходник Qt.
Записан

azazello
Пользователь

Сообщений: 17



« Ответ #12 : 15 Января, 2012, 20:13:17 »

Mezomish - дело не в версиях SDK - а в том, как libblackberry.so подцепляет FreeType:
в рабочей версии - только базовые функции ( и их дефайны FT_*)(http://www.freetype.org/freetype2/docs/reference/ft2-base_interface.html), а в той, что падает со шрифтами - есть и FT_ и FTC_ (кеш - http://www.freetype.org/freetype2/docs/reference/ft2-cache_subsystem.html).
полное сообщение об ошибке
Код:
imf_client_init failed - IMF services will be unavailable
QFontDatabase: Cannot find font directory /home/aza/sdk/src/qt-qnx/stage/nto/armle-v7/usr/lib/qt4/lib/fonts - is Qt installed correctly?

почему у меня первый раз собралось нормально, а второй, как у Mezomish - я пока не понял Sad
Записан
Mezomish
Интересующийся

Сообщений: 6


« Ответ #13 : 15 Января, 2012, 20:33:13 »

azazello: решение для QFontDatabase см. выше: http://forum.kpda.ru/index.php/topic,682.msg6921.html#msg6921
Записан
azazello
Пользователь

Сообщений: 17



« Ответ #14 : 15 Января, 2012, 20:43:45 »

сорь - я просто не понял - что то решение подошло Wink
и да - разница между версиями libblackberry.so оказалась в статической (не работают шрифты) и динамической (работают) линковке с libfreetype.so.1 и libfontconfig.so.1.
мне кажется, что правильнее всё-таки линковаться с динамическими либами (т.к. они идут в стандартной поставке) - и тогда не надо ни переменных окружения выставлять, ни тащить 500кб лишних с Qt Wink
Записан
Страниц: [1] 2 3 ... 7   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2016 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 17 Ноября, 2016, 06:54:30