GrabDuck

IDE для MotoMAGX/Dingux?! Легко! Подрубаем Toolchain’s & SDK’s к Qt Creator’у! И не ...

:

Наверное, каждый кто пытался написать что-нибудь интересное для телефонов Motorola на платформе MotoMAGX или для различных портативных игровых консолей, к примеру, Dingoo A320 или Ritmix RZX-50 на платформе Dingux, сталкивался с жесткой необходимостью использования какой-либо удобной среды разработки. Голая консоль и режимный редактор — это конечно круто и хардкорно, но иногда так хочется использовать полноценную рабочую среду с ее огромными возможностями, а не нагружать свой мозг различными командами консольных текстовых редакторов, которые так неудобны многим разработчикам. Хотя некоторые, особо бородатые спецы, вытворяют с ними такие вещи, что все удобство интегрированных средств разработки невольно меркнет на фоне скорости набора и редактирования текста этими профессионалами в таких вот экзотических программах.



Qt Creator, запущенный в одном из дистрибутивов GNU/Linux (кликабельно)

Поскольку Toolchain’s & SDK’s для платформ MotoMAGX и Dingux можно использовать только в дистрибутивах GNU/Linux, разработчики приложений для этой платформы весьма ограничены в выборе полноценных IDE. Скорее всего им приходится работать либо в KDevelop, либо в Code::Blocks. Но большинство разработчиков вообще не знают о существовании достойных интегрированных сред разработки под GNU/Linux, и предпочитают писать код прямо в любимом текстовом редакторе. Кто-то пишет в Kate, а кто-то в gedit или его форках, ну а некоторые даже осиливают для такого дела vim, а то и emacs!

Но сейчас, к счастью, речь пойдет о весьма зрелой и проверенной на прочность кроссплатформенной IDE, имя которой — Qt Creator.

Содержание:

1. Введение в Qt
1.1. Отличительные черты фреймворка Qt
1.2. История возникновения Qt
2. Экскурс в историю Qt Creator
3. Настройка окружения для установки инструментария
3.1. Установка дистрибутива GNU/Linux
3.2. Установка дополнительных пакетов в систему
3.3. Установка среды разработки Qt Creator в нашу систему
4. Сборка и настройка всеобъемлющего инструментария для различных платформ
4.1. Хост (текущая система), архитектура x86_64
4.1.1. Конфигурирование и сборка библиотеки Qt под x86_64 (хост)
4.1.2. Настройка Qt Creator для работы с тулчейном x86_64 и Qt SDK
4.1.3. Разработка утилиты magxheader
4.2. MotoMAGX, архитектура armv6j
4.2.1. Установка Toolchain & SDK для платформы MotoMAGX
4.2.2. Конфигурирование и сборка библиотеки Qt под arm (MotoMAGX)
4.2.3. Настройка Qt Creator для работы с тулчейном arm и MotoMAGX SDK
4.2.4. Сборка проектов для платформы MotoMAGX в Qt Creator
4.3. Dingux/OpenDingux, архитектура mips
4.3.1. Установка Toolchain & SDK для платформы Dingux/OpenDingux
4.3.2. Конфигурирование и сборка библиотеки Qt под mips (OpenDingux)
4.3.3. Настройка Qt Creator для работы с тулчейном mips и Dingux SDK
4.3.4. Сборка проектов для платформы Dingux/OpenDingux в Qt Creator
4.4. Qt-приложения для Embedded Linux (MotoMAGX, OpenDingux)
5. Полезные советы при работе с Qt Creator
6. Полезные ссылки и ресурсы для изучения фреймворка Qt

1. Введение в Qt

Перед тем, как непосредственно начать своё повествование про Qt Creator и Qt, а потом описать процесс создания мощного инструментария, позволяющего собирать проекты под различные платформы, я хотел бы немного рассказать вам о библиотеке Qt. Наверняка многие слышали об этом замечательном и мощном фреймворке для построения пользовательских графических интерфейсов в самых различных операционных системах.

<< Перейти к содержанию

1.1. Отличительные черты фреймворка Qt

Итак, Qt — это кросс-платформенный фреймворк для разработки прикладного ПО на языке программирования C++. Программное обеспечение, построенное на этом инструментарии не обязательно должно содержать графический интерфейс пользователя (GUI). С помощью огромного количества всевозможных классов вы можете написать приложение, работающее только через интерфейс командной строки (CLI). Но в основном, конечно, Qt используется для построения графических приложений, главная особенность которых — кросс-платформенность. Это означает, что просто перекомпилировав проект без изменения исходного кода с помощью различных SDK, предназначенных для определенных операционных систем, вы получите полностью работоспособную программу для необходимой вам операционной системы.



Логотип фреймворка Qt — стилизованный зеленый прямоугольник с одноименной надписью внутри, написанной конденсированным шрифтом

Кросс-платформенные приложения, написанные с помощью языка C++ и фреймворка Qt будут значительно быстрее работать чем, например, их кросс-платформенные аналоги, написанные тоже на кросс-платформенном языке — Java. Это происходит из-за того, что Qt в связке с C++ компилируется в машинный код, то есть программа будет исполняться непосредственно процессором, в отличии от той же Java, в которой исходный код компилируется в специальный байт-код, впоследствии выполняющийся в специальной программе-интерпретаторе. Конечно, из Java-программ тоже возможно вызывать различные низкоуровневые инструкции, вплоть до ассемблерных, через JNI; но программы, написанные на чистом C++ или С будут всегда быстрее. Быстродействие — это одно из самых важных достоинств фреймворка Qt.

Помимо этого, существует еще одно важное конкурентное преимущество, хотя в наши дни высоких скоростей и оптоволоконных кабелей, оно считается не особо актуальным. Я имею ввиду достаточно маленький размер библиотек, в сравнении с опять же Java или C#. Если в Java для запуска приложения обязательно нужен JRE, который занимает достаточно много места, то в связке Qt + C++ вы можете не беспокоится за размер своего приложения. Статически слинковав программу с необходимыми библиотеками можно получить достаточно небольшой размер исполняемого файла, в пределах 10-12MB. А если исполняемый файл программы сжать каким-нибудь пакером, например upx‘ом, размер программы волшебным образом уменьшиться до вполне приемлемых 4-5МБ, при условии, что вы не нагружали свою программу тяжелыми ресурсами. Для выполнения программы, основанной на Qt и C++, не нужно устанавливать различные среды выполнения, на подобие JRE или .NET Framework. Вы можете просто запустить свою небольшую программу с флешки. Портативность и небольшой размер Qt-библиотек при очень мощном функционале — еще одно достоинство этого фреймворка.



Гистограмма, наглядно демонстрирующая размер исполнительных файлов, сжатых утилитой upx до и после

К сожалению, язык C++ является одним из самых сложных языков для обучения, поэтому, чтобы разобраться во всех тонкостях разработки программ в связке Qt и C++, придется прочитать и вникнуть в содержание нескольких толстых книг. Но, к счастью, у библиотеки Qt существуют «привязки», называемые иногда биндингами, ко многим популярным языкам программирования: Python, Ruby, Java и другим. Необычно популярным является PyQt. Эти «привязки» позволяют многим программистам писать программы с графическим интерфейсом основанным на Qt на любимом языке, не вдаваясь во все подробности C++.



Логотип PyQt (слева) и Jambi, «привязки» фреймворка Qt к языку Java

Qt является полностью объектно-ориентированным фреймворком, легко расширяемым при необходимости и поддерживающим технику компонентного программирования. Основой построения графических интерфейсов на Qt, являются такие компоненты, как виджеты. Каждый элемент в окне программы, будь то кнопка или переключатель — это отдельный виджет. Виджеты генерируют различные сигналы, которые могут вызывать слоты — специальные функции, реагирующие на различные события в окне. В последствии, концепцию сигналов-слотов и виджетов взяли на вооружение многие графические фреймворки. Кроме построения интерфейса в Qt имеется также Phonon — мультимедийный фреймворк, на его основе и на основе Qt можно разрабатывать различные мультимедийные приложения, например, плееры. Но и это еще не все: в состав Qt входит QWebKit, благодаря которому легко можно сделать свой браузер.



Fancy Browser — полноценный браузер, являющийся примером использования библиотеки QWebKit (кликабельно)

Инструментарий Qt может распространяться по трём лицензиям:

  • Qt Commercial — для разработки ПО с закрытым кодом, эта лицензия допускает модификацию инструментария Qt без раскрытия изменений.
  • GNU GPL — для разработки свободного ПО с открытым исходным кодом.
  • GNU LGPL — для разработки ПО с закрытым кодом и собственной лицензией, без внесения изменений в Qt.

Подробнее о лицензиях можно почитать в разделе «Licensing» на официальном сайте.

<< Перейти к содержанию

1.2. История возникновения Qt

Разработка библиотеки началась в 1991 году, двумя энтузиастами — Haavard Nord’ом и Eirik’ом Chambe-Eng’ом, позже основавшими компанию Trolltech ASA. Первые две версии библиотеки Qt поддерживали только две платформы: Qt/X11 для Unix и Qt/Windows для MS Windows. Причем версия фреймворка под Windows была выпущена под коммерческой лицензией, иными словами являлась платной.



Старый логотип Trolltech’овского фреймворка Qt, стилизованная надпись на зелёном фоне

В конце 2001 года компания Trolltech выпускает Qt 3.0, в котором была добавлена поддержка операционной системы MacOS X, но под коммерческой лицензией. В июне 2003 года компания выпустила Qt 3.2, в котором поддержка операционной системы MacOS X была зарелизена под лицензией GPL. Спустя пять лет, 17 июня 2008 года, мобильный гигант Nokia приобретает Trolltech ASA и выкладывает исходный код фреймворка на хостинг проектов Gitorious, чтобы собрать большое сообщество разработчиков вокруг своей библиотеки. Популярность фреймворка Qt среди C++-разработчиков при таком подходе заметно возросла.



Qt 5, самая последняя версия библиотеки, содержит в себе более 6-ти миллионов строк кода (данные с ресурса http://www.ohloh.net)

На основе Qt построено много популярных приложений и даже окружений рабочего стола. На вскидку: KDE, Autodesk Maya, Skype (в версии для GNU/Linux), Google Earth, VirtualBox, VLC Media Player, IDA Pro и множество других не менее популярных программ. Именно за достаточную простоту разработки и гибкие возможности многие разработчики и выбирают этот фреймворк.



KDE — одно из самых популярных окружений рабочего стола для GNU/Linux, использующее библиотеку Qt (кликабельно)

Сегодня Qt развивается семимильными шагами и принадлежит компании Digia. Стабильно, раз в два-три месяца, выходят новые версии библиотек, своевременно исправляются различные проблемы и баги совместимости. Сам фреймворк стал необыкновенно мощным, в нем содержится огромный стек многих современных технологий, например, теперь появилась возможность создавать интерфейсы с помощью технологии Qt Quick, построение графики в которой реализуется с помощью связки двух языков: особого языка QML и обычного JavaScript’a. Помимо этого, Digia продолжает развивать две версии своего детища: четвертую и пятую. В четвёртой сочетается надёжность и стабильность, проверенная временем, а в пятую добавляются новые возможности и технологии. На мой взгляд, это отличный подход. Лично мне возможностей четвёртой версии хватает за глаза. О Qt можно говорить вечно, поэтому, если кто-то заинтересовался этой библиотекой всерьёз, он может прочитать весьма объемлющую статью в википедии, а мы остановимся на Qt Creator.

<< Перейти к содержанию

2. Экскурс в историю Qt Creator

История создания Qt Creator начинается с 2007 года, именно тогда он начинает разрабатываться под кодовым названием Workbench еще в существующей компании Trolltech GmbH. Немного позже Workbench переименовывают в Project Greenhouse, а Trolltech полностью поглощается весьма известной компанией того времени, производителем мобильных телефонов и смартфонов, ныне растерявшим все свои полимеры. Речь конечно идёт о Nokia. Именно под эгидой этой компании и состоялся первый релиз этой замечательной IDE, которую весьма спешно переименовали в Qt Creator и выпустили в наборе, под названием Nokia Qt SDK.



Графический интерфейс установщика Nokia Qt SDK

Хотя первые версии Qt Creator были весьма ограниченны в функционале, разработчики данной IDE уже в то время руководствовались особой философией. Она заключалась в том чтобы сосредотачиваться не только на огромном количестве возможностей, но и педантично отшлифовывать мелкие детали, которые порой незаметны, но весьма часто облегчают жизнь. Несмотря на достаточно скудный функционал первых билдов, Qt Creator уже тогда мог похвастаться такими сильными возможностями, как:

  • Интеграция дабаггера CDB, что позволило отлаживать приложения MS Windows, скомпилированные компилятором MS C/C++ Optimizing Compiler, не хуже, чем в Visual Studio.
  • Поиск и замена текста с помощью сложных регулярных выражений.
  • Режим FakeVim, позволяющий матёрым unix’оидам редактировать код со скоростью света.
  • Различные варианты автосохранения изменённого файла перед сборкой или запуском.
  • Возможность отключения точек останова во время выполнения программы.
  • Использование различных компиляторов.
  • Подробнейшая offline- и online-документация, по праву считающаяся одной из самых лучших.

Вкупе с быстрыми темпами разработки, открытостью кода, внедрению новых возможностей, Qt Creator завоевал многие сердца разработчиков, и в данный момент имеет достаточно большую аудиторию. В него постоянно внедряются новые возможности и исправляются баги. Но об этом немного ниже.



Современный логотип Qt Creator: белое перо символизирует лёгкость разработки приложений и скорость работы в этой IDE

Пакет Qt SDK представлял собой огромный набор всевозможных инструментов, позволяющий упростить создание Qt-приложений для телефонов, использующих операционную систему Symbian OS или Maemo/MeeGo. Nokia Qt SDK обеспечивал огромную гибкость разработки графических интерфейсов практически для любых телефонов Nokia. Приложения могли использовать как и привычные Qt вкупе с Qt API, так новейший Qt Quick, который является набором технологий, предназначенных для создания анимированных, динамических интерфейсов. Этот инструментарий был полностью кросс-платформенным, разрабатывать приложения для смартфонов можно было как в Microsoft Windows, так и в Apple MacOS X и популярных дистрибутивах GNU/Linux.



Пример приложений, написанных с использованием технологии Qt Quick. Игра Samegame (слева) и мобильный клиент Flickr

После начала сотрудничества с Microsoft’ом, Nokia решила отказаться от продолжения разработки и поддержки библиотеки Qt и всего инструментария, созданного на её основе. Все наработки Trolltech и Nokia ушли к небольшой, но ответственной финской софтверной компании Digia. Они находятся под её владением и по сей день. Qt SDK разделился на основные компоненты — интегрированную среду разработки Qt Creator, непосредственно сам Qt Framework, содержащий все основные библиотеки и инструменты для создания кросс-платформенных интерфейсов, ну и Qt Installer Framework — фреймворк для создания кросс-платформенных инсталляторов.



Современный Qt Creator позволяет создавать интерфейсы с использованием технологии Qt Quick (кликабельно)

Сегодня Qt Creator — мощная и функциональная IDE, с лаконичным и ничем не перегруженным внешним видом, в которой приятно работать. Поражает скорость отзывчивости интерфейса и время «холодного» старта. Помимо продвинутого редактора кода, в Qt Creator имеется возможность визуального построения графических интерфейсов с помощью Qt Quick или привычных виджетов Qt Widgets.

<< Перейти к содержанию

3. Настройка окружения для установки инструментария

Итак, хватит истории. Приступаем к практике! В этом разделе описана настройка и установка одного весьма популярного дистрибутива GNU/Linux, а также подготовка среды для установки всего необходимого инструментария для разработки приложений на платформах MotoMAGX и Dingux. К сожалению, инструментарием невозможно воспользоваться в операционных системах семейства MS Windows, но вы можете выбрать различные способы установки дистрибутива GNU/Linux не прибегая к изменению вашей основной операционной системы.

<< Перейти к содержанию

3.1. Установка дистрибутива GNU/Linux

Поскольку Qt Creator имеет возможность запускаться на различных системах, подготовим среду для его работы в таком дистрибутиве GNU/Linux, как Linux Mint 15 Cinnamon:
[ => DOWNLOAD | СКАЧАТЬ (~1GB), ver. 15 <= ]



Внешний вид рабочего стола и интерфейса в дистрибутиве Linux Mint 15 Cinnamon (кликабельно)

На мой взгляд, это один из самых дружелюбных к пользователю дистрибутивов с красивым и лаконичным интерфейсом. Но вы, конечно, можете установить Qt Creator и сопутствующий инструментарий с помощью этой инструкции на любую другую систему GNU/Linux. Различия могут быть лишь в используемых пакетных менеджерах, но если вы используете что-либо отличное от apt, то вы уж точно должны разобраться.

Совсем не обязательно устанавливать Linux Mint на свой компьютер основной системой. Если вам удобно работать под MS Windows, то можно использовать специальную программу для виртуализации и установить Mint прямо внутрь виртуальной машины. Это позволит вам воспользоваться всеми функциями этой операционной системы прямо в окне вашей версии Windows. Подробнее про установку виртуальной машины и гостевой операционной системы можно прочитать здесь, начиная с первого пункта мануала. Для виртуализации я советую воспользоваться бесплатной программой VMware Player, ее использует большое количество юзеров и поэтому, если у вас возникнут вопросы по работе этой программы, вы легко сможете найти ответы на них в интернете. Отмечу, что после установки программы виртуализации необходимо обязательно перезагрузить ваш компьютер.



Linux Mint 15 в качестве гостевой системы, установленной в виртуальную машину VMware Player, которая работает в MS Windows 7 (кликабельно)

После удачной установки вас должен приветствовать чистый рабочий стол Linux Mint. Давайте перейдём к настройке этого дистрибутива. Если вы используете Mint в виртуальной машине VMWare Player, то нужно обязательно установить VMware Tools; это позволит вам использовать Mint в полноэкранном режиме, а также обмениваться файлами между гостевой и основной операционными системами несколькими способами: через общие папки, либо с помощью банального Drag’n’Drop’а (просто перетяните необходимые файлы в окно файлового менеджера гостевой системы или обратно). Если у вас на основной ОС есть доступ в интернет, то он будет присутствовать и в гостевой системе. Доступ в интернет на гостевой системе нам необходим.

<< Перейти к содержанию

3.2. Установка дополнительных пакетов в систему

Для начала запустим терминал и установим необходимые для окружения пакеты из репозитория. Терминал можно запустить нажав сочетание клавиш Alt+F2 и введя в появившемся поле команду:

gnome-terminal

А затем нажав клавишу Enter. После отправки команды должен запуститься терминал, через который мы и установим необходимые для разработки пакеты.



Симпатичное окошко, всплывающее при нажатии на комбинацию клавиш Alt+F2

Сперва мы установим компилятор и набор библиотек для языка C++, с помощью следующей команды, набранной в терминале:

sudo apt-get install g++

После ее выполнения у вас спросят пароль, который вы вводили при установке системы. После введения пароля пакеты компилятора начнут скачиваться из интернета и устанавливаться в Linux Mint.

Затем, с помощью команды:

sudo apt-get install git subversion mercurial

Мы установим популярные системы контроля версий, и с их помощью мы будем загружать различные исходники.



Процесс загрузки и установки пакетов компилятора g++

Если вы используете 64-битный дистрибутив, то обязательно выполните команду:

sudo apt-get install ia32-libs

Она установит прослойку для запуска 32-битных приложений в 64-битной среде. Поскольку компиляторы из SDK’s являются 32-битными, эта прослойка обязательно нам понадобится для успешного компилирования библиотеки Qt под целевые Embedded-платформы.
Примечание. Пакеты, которые загрузятся и установятся при выполнении этой команды, занимают довольно-таки большой объем: ~240MB.

Если пакеты не начнут загружаться и возникнет ошибка:

Попробуйте выполнить следующие команды:

Такое может произойти в Linux Mint 15 64-bit с оболочкой рабочего стола KDE.
Я всё же рекомендую не тянуть все 32-битные пакеты библиотек из репозитория, а установить лишь те, которые необходимы для работы 32-битных компиляторов. Таких пакетов немного, всего пять:

sudo apt-get install libc6:i386 libncurses5:i386 libexpat1:i386 zlib1g:i386 libstdc++6:i386

После установки этих 32-битных пакетов наши компиляторы смогут работать и в 64-битной системе.

Для успешного конфигурирования и компиляции библиотеки Qt впоследствии, необходимо установить дополнительные пакеты X Window System, предназначенные для разработчиков, пакет libfontconfig1-dev и пакеты mesa-dev, предназначенные для разработки приложений с поддержкой аппаратного ускорения графики.

sudo apt-get install libx11-dev libxext-dev libXrender-dev libfontconfig1-dev libgl1-mesa-dev libglu1-mesa-dev

Если их не установить, при конфигурировании фреймворка Qt под целевую платформу нашего компьютера могут возникнуть ошибки:

или

Но о конфигурировании и компиляции будет написано в следующем разделе.

Для того, чтобы приложения Qt могли использовать родную GTK-тему в дистрибутивах, где окружением рабочего стола является Gnome или его форки, следует установить пакет:

sudo apt-get install gtk+-2.0

Если вы используете окружение рабочего стола KDE, вам придётся установить пакет D-Bus:

sudo apt-get install libdbus-1-dev

Чтобы при запуске скомпилированных Qt-приложений на хосте не возникало ошибки:

Cannot mix incompatible Qt library (version 0xXXXXX) with this library (version 0xXXXXX)

При желании можно установить систему сборки CMake, но она не будет рассматриваться в данной статье. Однако, если у вас отсутствует любая система сборки (CMake, qmake), вы не сможете скомпилировать какую-либо программу в Qt Creator. Впоследствии мы скомпилируем библиотеку Qt и будем пользоваться qmake. Но, ради интереса, можете попробовать установить CMake с помощью команды:

sudo apt-get install cmake

В некоторых системах отсутствует утилита patch. Ее вы тоже можете установить с помощью команды:

sudo apt-get install patch

Эта утилита пригодится нам впоследствии.
На этом установка необходимых пакетов для сборки Qt завершена, приступаем к установке Qt Creator.

<< Перейти к содержанию

3.3. Установка среды разработки Qt Creator в нашу систему

Теперь можно зайти на сайт Qt Project с помощью любого браузера (в Linux Mint предустановлен Firefox) и скачать нужную версию Qt Creator. На момент написания этой статьи актуальной версией является 2.8.1:
[ => DOWNLOAD | СКАЧАТЬ (~61MB), ver. 2.8.1 <= ]
Обратите внимание на версию архитектуры, под которую собрана среда разработки. Узнать свою архитектуру можно набрав в терминале команду:

uname -i

Если она у вас «x86_64» или «amd64» — скачивайте 64-битный Qt Creator; если «x86» или «i686/i586/i486» — соответственно 32-битный.

Скорее всего инсталлятор Qt Creator’а загрузится в каталог «~/Downloads», поэтому переходим в него с помощью команды:

cd ~/Downloads

Проверить наличие файла «qt-creator-linux-XXX-opensource-X.X.X.run» в данном каталоге можно с помощью команды «ls» или «dir». Затем выполняем следующую группу команд, после которых должен запуститься установщик IDE:

Примечание. После первой команды необходимо будет ввести пароль, эта команда делает установщик исполняемым файлом и разрешает его запуск.

С помощью графического интерфейса устанавливаем Qt Creator в любую удобную и доступную для вас директорию.



Графический интерфейс установщика Qt Creator, запущенный в Linux Mint 15 Cinnamon

После завершения установки, Qt Creator можно найти в главном меню, в разделе «Programming».



Открытое окно Qt Creator и расположение программы в главном меню (кликабельно)

На этом настройка окружения для Qt Creator завершена. Можно запустить среду разработки, настроить её на свой вкус, например, кастомизировать цвет окна, поставить любимый шрифт. Обязательно проверьте наличие пункта «Git…» в разделе меню «Tools». После установки системы версионирования Git он должен там быть. Как было сказано выше, пока вы не можете собрать какой-либо проект, так как отсутствует система сборки. Если вы установили CMake — зайдите в меню «Tools» => «Options» => «Build and Run» => «CMake» и пропишите путь до исполнительного бинарника, обычно это:

/usr/bin/cmake

Система сборки qmake поставляется вместе с фреймворком Qt, поэтому для сборки каких-либо проектов фреймворк необходимо скомпилировать. Итак, переходим к следующему весьма продолжительному пункту, к компиляции библиотек Qt.

<< Перейти к содержанию

4. Сборка и настройка всеобъемлющего инструментария для различных платформ

Для кросс-платформенной сборки я выбрал последнюю на момент написания этой статьи версию библиотеки Qt из ветки 4.x.x — это Qt 4.8.5, который вышел пару месяцев назад. В отличии от предыдущей версии 4.8.4, провисевшей необновляемой достаточно долго, в версии 4.8.5 было исправлено много ошибок, за счёт чего увеличилась общая стабильность библиотеки. И хотя ничего нового практически не было добавлено, тем не менее рекомендуется обновиться с версии 4.8.4 до 4.8.5. В отличие от последней версии из пятой ветки (Qt 5.1.1), Qt 4.8.5 для всех unix-подобных платформ поставляется только в виде исходного кода, а не скомпилированных бинарных файлов. Поэтому компиляция и установка этой библиотеки занимает порядочное время.

Итак, с официальной страницы загрузки скачиваем последнюю версию исходников из ветки четвёртой версии:
[ => DOWNLOAD | СКАЧАТЬ (~230MB), ver. 4.8.5 <= ]
И переходим к нужному разделу статьи.

<< Перейти к содержанию

4.1. Хост (текущая система), архитектура x86_64

Скомпилированная библиотека под хост позволит нам разрабатывать и собирать различные проекты для нативной системы.
Начнем с распаковывания исходников в любую удобную вам директорию и переходу в неё. В процессе компиляции создаётся большое количество временных файлов, поэтому для компиляции я предпочитаю использовать каталог «/tmp»:

Примечание. Будьте внимательны, при перезапуске компьютера каталог «/tmp» очищается!

<< Перейти к содержанию

4.1.1. Конфигурирование и сборка библиотеки Qt под x86_64 (хост)

Теперь переходим к этапу, называемому конфигурированием. В результате прохождения этого этапа библиотека Qt будет сконфигурирована под нашу платформу. Для компьютера (хост) рекомендуется сконфигурировать наиболее полную версию библиотеки со всем возможностями. Итак, находясь в папке с исходниками, для конфигурирования следует выполнить специальную команду

Если вы используете окружение рабочего стола, являющееся форком Gnome (например, Cinnamon в Mint 15) или основанное на GTK+, команда конфигурирования будет следующей:

Если вы используете в качестве оболочки KDE, то команда примет следующий вид:

После нажатия клавиши Enter начнётся процесс конфигурирования, создания программы системы сборки qmake и генерации проектных Makefile’ов. По времени этот процесс займет приблизительно 5-10 минут, это сильно зависит от производительности вашего компьютера. Поэтому, пока выполняется команда, позвольте мне описать её некоторые опции-флажки.

Флаг platform выставляет необходимую целевую платформу для сборки. В нашем случае это конечно хостовый linux-g++. Флаг opensource выбирает необходимый тип лицензии, а флажок confirm-license ее подтверждает. Флаги gtkstyle и glib необходимы для систем, где в качестве окружения рабочего стола (DE) используется Gnome и его форки. Эти флаги позволят выглядеть Qt-приложению в вашей системе нативным. Например, в Linux Mint 15 Cinnamon используется форк популярного окружения рабочего стола — Gnome 3. Но если вы используйте дистрибутив с KDE, можете смело опустить оба флага и добавить флаг dbus. opengl говорит о том, что Qt может использовать аппаратное ускорение графики, там где это необходимо. С помощью флага prefix можно выбрать директорию для установки набора библиотек Qt. К примеру, для всех кросс-платформенных версий Qt я рекомендую использовать общий каталог «/opt/QtSDKs/».
Примечание. В отличии от платформы MS Windows, где используется две версии Qt-библиотек (релизная и дебажная, использующая суффикс «d»), в GNU/Linux имеется лишь один набор библиотек. При компиляции релизного бинарника отладочная информация аккуратно вырезается.

Если вы хотите отключить сборку каких-либо компонентов, к примеру, не собирать примеры кода или документацию, стоит добавить нужные флажки к опциям конфигурирования:

-nomake demos -nomake translations -nomake examples -nomake docs

Обычно перед конфигурацией библиотеки выполняют команду:

./configure --help

Которая позволяет посмотреть многие (но не все!) флажки и опции конфигурирования.

Если вас чем-либо не устроила текущая конфигурация, вы можете построить её заново, предварительно выполнив команду:

make confclean

Для очистки текущей конфигурации. Когда вы увидите сообщение:

Вы можете приступать к компиляции этого замечательного фреймворка. Время компилирования можно существенно уменьшить если воспользоваться распараллеливанием компиляции. Наверняка у многих современные двухъядерные процессоры, позволяющие раскидать процесс компиляции по нескольким ядрам. Задав аргумент команде make вы сможете существенно ускорить этот процесс. В общем виде команда make с аргументом выглядит так:

make -jN

Где аргумент «N» — это количество потоков. Обычно рекомендуется вычислять этот аргумент следующим образом: «N = количество ядер в процессоре + 1«. Но если вы не будете пользоваться компьютером во время компиляции, то можно задать «N» как «N = количество ядер в процессоре + 2«, что сильно нагрузит вашу систему. К примеру, на своём двухъядерном Intel Core 2 Duo E8200 @ 2.66 GHz для компиляции я в основном использую команду make -j3.



Фрагмент процесса компилирования библиотеки Qt

После нажатия клавиши Enter начнется долгоиграющий процесс построения необходимых библиотек, который займёт приблизительно 1.5-2 часа. Дольше всего компилируется, наверное такой компонент, как QWebKit. Процесс его компиляции растягивается почти на целый час. Во время построения, помимо уже собранного на этапе конфигурирования Qmake’а, соберутся ещё некоторые важные программы и инструменты. К примеру, Meta Object Compiler (moc), ищущий в исходном коде специальный макрос Q_OBJECT и создающий дополнительный исходный файл на C++, который содержит метаобъектный код и компилируется обычным компилятором. Именно благодаря moc мы можем пользоваться такими мощными возможностями, как сигналы и слоты. Помимо moc есть еще User Interface Compiler (uic), с помощью которого обычный «*.xml»-файл с описанием интерфейса превращается в готовый к использованию заголовочный «*.h».

После компиляции библиотеку необходимо установить в прописанный при конфигурировании каталог командой:

sudo make install

Процесс инсталляции занимает примерно 5-6 минут при полной сборке всех библиотек фреймворка.

Ура, библиотеки собраны и установлены в каталог «/opt/QtSDKs/Qt4.8.5-x86_64-all»! Давайте теперь настроим наш Qt Creator на работу со собранным фреймворком и подключим наш первый набор инструментов Qt для архитектуры x86_64.

<< Перейти к содержанию

4.1.2. Настройка Qt Creator для работы с тулчейном x86_64 и Qt SDK

Запускаем Qt Creator и заходим в меню «Tools» => «Options…» => «Build & Run», первым делом идём на вкладку «Qt Versions». С помощью кнопки «Add…» добавляем собранный нами файл «qmake», который располагается в директории «/opt/QtSDKs/Qt4.8.5-x86_64-all/bin»; затем нажимаем кнопку «Apply».



Добавление фреймворка Qt в Qt Creator

Теперь переходим на вкладку «Kits» и кликаем на набор инструментов «Desktop (default)», выбираем там наш компилятор, отладчик и версию собранной библиотеки Qt. Нажимаем «OK» и перезапускаем Qt Creator. Теперь у нас появилась возможность написать и скомпилировать какой-либо проект.



Настройка инструментария в Qt Creator

<< Перейти к содержанию

4.1.3. Разработка утилиты magxheader

Начнем, пожалуй, с написания одной крошечной программки, которая нам понадобится в дальнейшем при сопряжении Qt Creator’a и инструментария для платформы MotoMAGX. Её смысл таков: при генерации файла проекта с помощью команды:

qmake -project

Создаётся файл с расширением «*.pro» приблизительно такого содержания:

Нам необходимо создать небольшую программку, которая бы вырезала всю информацию выше строки «DEPENDPATH += .» и вставляла туда специальный, предварительно сгенерированный заголовок. Программа будет работать через CLI, то есть через командную строку. Модификация файла будет производиться с помощью связки C++ и Qt. В отличие, например, от Java, в С++ можно писать программы без использования принципов объектно-ориентированного программирования. Для простоты и скорости разработки мы тоже не будем залезать в дебри ООП и не будем создавать классы. Хотя, не следует забывать о том, что Qt все-таки объектно-ориентированный фреймворк и многие типы данных, которые используются в программе — являются классами, а переменные — объектами.

Проект назовём «magxheader», и разместим его где-нибудь в каталоге «~/Projects». Если директория «~/Projects» отсутствует, вы можете создать оную командой:

mkdir ~/Projects

Итак, запускаем Qt Creator, нажимаем CTRL+N, комбинация этих клавиш запустит мастер создания новых проектов.



Мастер создания новых проектов в Qt Creator

В открывшемся окне выберем «Qt Console Application», введём название проекта (magxheader) и зададим для него директорию. Если поставить галочку ниже, то данная директория будет выставляться по дефолту при создании новых проектов.



Настройка проекта

Нажимаем «Next» и попадаем в диалог выбора инструментария для сборки. Пока он тут у нас один. Отличие дебажной версии проекта от релизной заключается в том, что ее при необходимости можно отладить. Диалог выбора системы контроля версий можно пропустить.



Выбор инструментария для сборки

Итак, мы появились в редакторе и можем начать писать код! Предложенный нам шаблон ради интереса можно скомпилировать и запустить. Если вы не хотите, чтобы программы запускались во внешнем терминале системы — уберите галочку с пункта «Run in terminal». Для этого в боковом меню программы нужно выбрать пункт «Projects», а затем перейти на вкладку «Run» активного тулчейна. Кстати, именно в этом окне можно управлять инструментариями для сборки, если вы забыли выбрать какой-либо тулчейн при создании проекта.

Переходим снова в редактор, нажав в боковой панельке «Edit», и набираем (или вставляем) в него следующий код (в файл «main.cpp»): main.cpp. Обратите внимание на приятное автодополнение, позволяющее набирать код очень быстро.



Открытое окно Qt Creator с исходным текстом утилиты magxheader (кликабельно)

После набора кода и его визуальной проверки, необходимо скачать два заголовка, а затем сохранить их в папке «~/Projects/magxheader» и добавить их к нашему проекту:
Скачать «header_p1»
Скачать «header_p2»
Примечание. Если файлы просто открываются в браузере — нажмите на ссылку правой кнопкой мышки и выберите пункт «Save Link As…», а затем сохраните их в папку с проектом.

Щёлкнув правой клавишей мышки на проект, открытый справа в «Projects», необходимо выбрать в контекстном меню пункт «Add new…», далее выбрать «Qt» => «Qt resource file». Назвать его как-нибудь, к примеру, снова «magxheader».



Добавления файла ресурсов magxheader.qrc

После добавления префикса в файл ресурсов (просто добавьте корень «/»), появится возможность присоединять к проекту свои собственные файлы. Добавим в проект файлы «header_p1» и «header_p2», а затем сохраним «magxheader.qrc» нажатием комбинации клавиш CTRL+S.



Добавление префикса и ресурсных файлов

Чтобы скомпилировать программу можно нажать CTRL+B. Сочетание клавиш CTRL+R запустит программу на исполнение. Если вы были внимательны и правильно переписали код, то после запуска программы должны увидеть в консоли Qt Creator или терминале её вывод:

Переключение между дебажной и релизной версией исполнительного файла осуществляется с помощью комбинации CTRL+T или же просто можно переключить мышкой. Выберите релизную версию программы и соберите ее нажав CTRL+B. В дальнейшем она нам понадобится.

Небольшой обзор кода. Программа состоит из четырёх функций, исполнение программы начинается с функции «main()», в которой проверяется необходимое число аргументов, переданных программе; затем мы получаем текущее системное время, создаём три вектора, которые будут хранить куски готового файла и обрабатываем полученную информацию из файла с расширением «*.pro» несколькими функциями. Функция «num_of_input()» показывает, сколько строк вверху файла нужно обрезать, функции «cut_vector()» и «full_vector()» режут и заполняют вектор соответственно. Заголовки, которые мы добавили в ресурсы, жёстко вкомпиливаются в исполняемый файл. Если передать программе в качестве первого аргумента файл zFont.pro, а второго — название исполнительного файла для будущей программы, то утилита magxheader сгенерирует файл «zFont_magx.pro», с помощью которого можно будет собрать проект для MotoMAGX.
Скачать весь проект magxheader можно одним архивом:
[ => DOWNLOAD | СКАЧАТЬ (~5KB) <= ] | Проект magxheader на GitHub
Для сборки необходимо распаковать исходники и открыть файл «magxheader.pro» с помощью Qt Creator.

Итак, с библиотекой Qt для x86/x86_64 и сборкой простейших консольных программок все более-менее понятно. Если вы хотите научиться программировать графические интерфейсы для компьютера с использованием инструментария Qt, то в конце статьи я оставлю ссылки на весьма полезные ресурсы, которые помогут вам начать разрабатывать приложения.

<< Перейти к содержанию

4.2. MotoMAGX, архитектура armv6j

Наконец настал этап, для которого и писалась эта статья. Мы переходим к компиляции библиотеки Qt 4.8.5 для платформы MotoMAGX и сопряжению ARM-тулчейна с Qt Creator. Для того, чтобы подключить Toolchain & SDK этой платформы к среде разработки, нам придётся немного повозиться. Если вы знакомы с платформой MotoMAGX, то наверняка знаете, что интерфейс в этих мобильных телефонах базируется на использовании библиотеки Qt/Embedded 2.3.8, настолько старой и древней, что сейчас ее исходники в интернете найти довольно-таки непросто. Релиз библиотеки этой версии был выпущен в далеком 2004-ом году, когда у Qt/Embedded еще даже не было системы сборки qmake; в то время во всю использовался троллтековский tmake и progen.



Некоторые из моделей телефонов Motorola, использующих MotoMAGX. Слева направо: ZN5, E8, EM30 и EM35

Всего было выпущено с десяток мобильных телефонов на платформе MotoMAGX, которая представляет собой последовательное развитие платформы EZX. Все MotoMAGX-устройства объединяет примерно одинаковое железо, различия встречаются в основном в количестве оперативной памяти (в топовых моделях её побольше), модулях камеры и WiFi. Но в основном характеристики железной начинки таковы:

  • Технологическая платформа: SCMA11 aka Freescale MXC275-30.
  • CPU: ARM1136JF-S архитектуры ARMv6j (j в названии говорит о том, что в процессоре присутствует технология Jazelle, позволяющая аппаратно исполнять Java-байткод). Номинальная частота процессора: 532 MHz. Есть поддержка VFP, благодаря этой технологии приложения, использующие операции с плавающей запятой, могут работать быстрее.
  • RAM: 64MB-128MB.

На этой ноте исторической и технологической справки приступим к подготовке исходного кода и окружения.

<< Перейти к содержанию

4.2.1. Установка Toolchain & SDK для платформы MotoMAGX

Для компиляции проектов под целевую платформу, необходимо загрузить и настроить следующий инструментарий:
[ => DOWNLOAD | СКАЧАТЬ (~170MB) <= ]
Я предпочитаю использовать именно этот сдвоенный тулчейн, так как он достаточно гибок в плане использования, хотя несколько громоздок. Его установка предельно проста; с помощью команд:

Распаковываем инструментарий в необходимую директорию. Как вы уже могли заметить, глядя на лог архиватора при извлечении файлов из архива, в тулчейне используется древнейший компилятор arm-linux-gnueabi-gcc версии 3.4.3, которая была зарелизена аж в 2004 году. После распаковки можно скопировать скрипты обновления переменных окружения куда-нибудь, к примеру в директорию «~/Projects»:

Впоследствии, их подгрузка понадобится для компиляции различного программного обеспечения. В этих скриптах, в переменную окружения «${PATH}» добавляется путь до нужных для сборки инструментов, например, до кросс-компилятора arm-linux-gnueabi-gcc, который порождает код для архитектуры armv6j, используемой в платформе MotoMAGX. Первый скрипт заменяет полностью системные (хостовые) компиляторы на армовские, а второй — лишь даёт доступ к ним из переменной «${PATH}». Именно второй скрипт и потребуется нам для сборки библиотеки.

Выполнив команду:

sudo ln -s -d /opt/toolchains/motomagx/arm-eabi -t /

Мы создадим в корне своей файловой системы ссылку на тулчейн, что избавит нас от ошибки:

/arm-linux-gnueabi/bin/ld: cannot find /arm-eabi/arm-linux-gnueabi/lib/libc.so.6

Которая может получиться в процессе линковки.

На этом установка инструментария завершена, переходим к компиляции платформы сборки qmake и фреймворка Qt.

<< Перейти к содержанию

4.2.2. Конфигурирование и сборка библиотеки Qt под arm (MotoMAGX)

Если у вас остались исходники библиотеки с прошлой сборки Qt для архитектуры «x86_64», можете просто выполнить команду:

make distclean

В каталоге с исходниками, чтобы очистить сборку для переконфигурирования. Если исходников не осталось, распаковываем их заново:

Поскольку на платформе MotoMAGX используется довольно старый компилятор и для построения нативного графического интерфейса требуется древнейшая библиотека Qt/Embedded 2.3.8, нам придется немного пропатчить фреймворк. Вообще Qt меня порадовал тем, что его можно скомпилировать практически любым компилятором, даже очень древним. Скачаем следующий патч: patch_qt4.8.5_for_arm.patch
Примечание. Если он открывается в браузере в текстовом виде, нажмите на ссылку правой клавишей мышки и выберите пункт «Save Link As…», после чего сохраните файл в каталог «~/Downloads». Для применения патча, находясь в каталоге «/tmp/qt-everywhere-opensource-src-4.8.5» выполним команду:

patch -p1 < ~/Downloads/patch_qt4.8.5_for_arm.patch

Она создаст специальный файл «old_moc.prf», который поможет разрешить конфликты с доисторическим moc-компилятором, используемым в MotoMAGX. Помимо этого пропатчится файл «qthread_unix.cpp», фикс в котором позволит нормально собрать Qt с помощью кросс-компилятора arm-linux-gnueabi-gcc версии 3.4.3 и избавиться от следующей ошибки при компиляции:

error: thread-local storage not supported for this target

Следующий шаг — обновление переменных окружения с помощью команды:

. ~/Projects/setenv-z6-2.sh

Она подгрузит необходимые компиляторы для архитектуры armv6 в переменную окружения «${PATH}». Обратите вниманию на точку в команде, она важна, общий формат команды такой: [точка][пробел][скрипт].
Для конфигурации фреймфорка Qt под платформу MotoMAGX необходимо выполнить следующую команду:

Объясню некоторые из её параметров. Флажки little-endian и host-little-endian задают порядок байтов для кросс-платформенной сборки. Флаг embedded с параметром arm-gnueabi говорит о том, что будет собрана embedded-версия библиотеки для целевой платформы с общей архитектурой arm. Флаги nomake отключают сборку некоторых компонентов, указанных у них в параметрах. qt-gfx-transformed позволит разворачивать картинку на дисплее при необходимости. Флаг fast ускоряет конфигурирование, а static говорит компилятору о том, что необходимо будет собрать статические библиотеки и прилинковать их к исполняемым файлам. Это существенно увеличит их размер, зато не придётся таскать за собой разделяемые версии библиотек. prefix указывает путь конечной установки инструментария Qt.

Таким образом у нас будут собираться релизные (по дефолту в системах GNU/Linux собираются именно релизные библиотеки), статические версии библиотек. Вы в любой момент можете заново переконфигурировать фреймворк, например, удалив флаг static, чтобы сделать библиотеки Qt динамическими и уменьшить размер исполнительных файлов. Для этого необходимо выполнить команду:

make confclean

И заново переконфигурировать библиотеку с необходимыми параметрами, список которых можно посмотреть, выполнив:

./configure --help

Теперь переходим непосредственно к компиляции. Для сборки выполняем команду:

make -jN

Где «N» — это число ядер в вашем компьютере, увеличенное на 1. Компиляция фреймворка под архитектуру armv6j займет приблизительно час. Несмотря на то, что при статической сборке отключён WebKit, компиляция будет медленной: всё-таки 32-битный кросс-компилятор arm-linux-gnueabi-g++ работает значительно медленнее, чем нативный 64-битный gcc.

После успешной компиляции установим собранные библиотеки в каталог, который мы задавали при конфигурировании, с помощью команды:

sudo make install

Директория со собранным фреймворком занимает приблизительно 110 MB, что намного меньше, чем объем библиотек, собранных для x86_64 (~1.2 GB), даже несмотря на то, что мы делали библиотеки для armv6j статическими. На этом сборка инструментария Qt закончена. Теперь необходимо настроить среду разработки Qt Creator для возможности компиляции программ под целевую платформу MotoMAGX, с использованием некоторых утилит из инструментария Qt.

<< Перейти к содержанию

4.2.3. Настройка Qt Creator для работы с тулчейном arm и MotoMAGX SDK

Запускаем Qt Creator и для подключения необходимого инструментария и заходим в «Tools» => «Options…» => «Build & Run», выбираем в окне опций вкладку «Compilers». С помощью кнопки «Add» => «GCC», а затем кнопки «Browse…», добавляем армовский кросс-компилятор arm-linux-gnueabi-gcc, который находится по пути «/opt/toolchains/motomagx/arm-eabi2/bin/arm-linux-gnueabi-gcc-3.4.3». Затем называем компилятор как-нибудь по-приветливее, к примеру «ArmGCC» и нажимаем кнопку «Apply».



Добавление компилятора ArmGCC в Qt Creator

Далее переходим на вкладку «Qt Versions» и подключаем собранный нами фреймворк Qt для архитектуры armv6j. Нажимаем кнопку «Add…» и выбираем скомпилированный qmake, находящийся по адресу «/opt/QtSDKs/Qt4.8.5-armv6j-static/bin/qmake», он должен нормально подцепиться средой. Для принятия изменений нажимаем кнопку «Apply».



Добавляем Qt-фреймворк, скомпилированный для armv6j

Теперь нам необходимо собрать из всех добавленных инструментов общий инструментарий для платформы MotoMAGX. Для этого переходим на вкладку «Kits» и с помощью кнопки «Add» создаем новый Kit, который назовём, например, так же как и платформу. В качестве компилятора выбираем наш ArmGCC, а в качестве «Qt Version» — Qt 4.8.5 (Qt4.8.5-armv6j-static). Армовский дебаггер можно найти в папке рядом с компилятором, его имя «arm-linux-gnueabi-gdb». Итак, нажимаем заветную кнопку «OK» и перезапускаем Qt Creator. На этом подключение тулчейна для смартфонов MotoMAGX к среде разработки приложений завершено.



Создание инструментария MotoMAGX

Прежде чем перейти к разбору примеров и компиляции проектов для телефонов на платформе MotoMAGX, я советую скопировать собранную нами программу magxheader в папку тулчейна. Помните, мы собирали ее для x86_64 тут? Наверняка её собранная релизная версия присутствует у вас в директории «~/Projects/build-magxheader-Desktop-Release» и нам осталось её просто скопировать:

Если вы не собирали эту программу, потратьте немножко своего времени и соберите. Процесс сборки подробно описывается в статье по ссылке выше.

Теперь откроем скрипты «~/Projects/setenv-z6.sh» и «~/Projects/setenv-z6-2.sh» и добавим с помощью любого текстового редактора в оба файла строку:

export PATH=/opt/QtSDKs/Qt4.8.5-armv6j-static/bin:$PATH



Добавление необходимой строки в скрипты подгрузки окружения

А затем сохраним их. Эта манипуляция даст возможность нам воспользоваться системой сборки qmake. Теперь у нас имеется полностью настроенное окружение для компиляции и настроенный Qt Creator для сборки MotoMAGX-проектов.
Примечание. Для добавление строки в скрипт можно использовать и терминал, выполнив в нем следующие команды:

<< Перейти к содержанию

4.2.4. Сборка проектов для платформы MotoMAGX в Qt Creator

Перед тем, как мы будем разбираться в методах компиляции каких-либо проектов с помощью IDE и arm-тулчейна, я хотел бы написать пару слов теоретического материала. На самом деле, система сборки qmake сама ничего не собирает, эта утилита лишь генерирует из компактного проектного файла с расширением «*.pro» необходимый Makefile (файл сборки) для нужной целевой платформы. Затем утилита make обрабатывает правила сборки, прописанные в Makefile и вызывая по очереди необходимые утилиты (компилятор, линковщик) собирает исполнительный файл. Сами по себе Makefile’ы практически невозможно использовать в какой-либо IDE, так правила составления Makefile не стандартизированы и цели могут называться какими угодно именами. Но подход с использованием qmake позволил создавать и использовать один «*.pro»-файл для всех платформ. Но программы с графическим интерфейсом, которые используются в MotoMAGX не являются по своей архитектуре кросс-платформенными, и весьма платформозависимы, поэтому проектный файл предварительно нуждается в обработке нашей утилитой magxheader, которая добавит специальный заголовок, благодаря которому в Qt Creator можно будет разрабатывать и собирать платформозависимые приложения для MotoMAGX-смартфонов, базирующиеся на древней библиотеке Qt/Embedded 2.3.8 и платформозависимых magx-библиотеках.



Внешний вид интерфейса одного из устройств, работающих под управлением MotoMAGX

Платформозависимым приложением можно считать написанный Ant-ON‘ом, текстовый редактор zTextEdit, который мы и будем сейчас собирать в качестве примера, с помощью Qt Creator. Исходники различных MotoMAGX-приложений можно найти на хостинге проектов code.google.com/p/open-mgx. Итак, загрузим исходники интересующего нас приложения с помощью системы управлений версий subversion в папку с проектами:



Так выглядит графический интерфейс программы zTextEdit

Внимательно осмотрев файлы в директории можно найти там файл «Makefile», который и содержит необходимые правила для сборки. Поскольку программы для MotoMAGX в основном разрабатывались без применения различных IDE, единственным решением для сборки оставались Makefile’ы. Но нам он не потребуется, так как порождением этих файлов займётся утилита qmake. Для этого, находясь в папке проекта zTextEdit следует выполнить следующие команды:

Давайте разберем каждую из них. Первая команда обновит нам переменные окружения и добавит в «${PATH}» необходимые пути, чтобы мы могли воспользоваться различными инструментами. Команда qmake -project, выполненная в папке с исходниками, создаст нам файл проекта «zTextEdit.pro», в котором описаны все необходимые исходные файлы и некоторые правила для их сборки. Команда magxheader zTextEdit.pro zTextEdit запустит созданную нами утилиту, которая примет на обработку два аргумента: файл проекта, который нужно модифицировать и название выходной программы. После своего выполнения утилита magxheader создаст файл «zTextEdit_magx.pro» со специальным заголовком.

Файл «zTextEdit_magx.pro» и следует открыть с помощью Qt Creator. Запускаем IDE и кликаем мышкой меню «File» -> «Open File or Project» -> [выбираем «zTextEdit_magx.pro»] и нажимаем кнопку «Open». Откроется окно конфигурации проекта, в котором мы для сборки должны выбрать добавленный нами инструментарий «MotoMagX» и отключить сборку под хост «Desktop». После нажатия кнопки «Configure Project» можно открыть в редакторе файл проекта «zTextEdit_magx.pro» и посмотреть на изменения, внесённые программой magxheader.



Открытие проектного файла в Qt Creator

Мы тоже можем вносить изменения в этот файл. Например, заменив значение в переменной «CONFIG», которое описано в строке #33 (по дефолту там «platform-zn5»), на «platform-e8» мы изменим правила сборки, что впоследствии повлечёт за собой компиляцию программы для Motorola ROKR E8. Различные флаги для компилятора можно указывать в переменной «DEP_DEFINES» индивидуально для каждой из платформ, которых всего девять. Библиотеки тоже можно индивидуально добавлять в переменную «DEP_LIBS». Строка:

CONFIG += moc_old

Дает возможность использовать старый moc из тулчейна, путь к которому содержится в переменной «QMAKE_MOC».

Итак, скрестив пальцы, нажимаем в Qt Creator заветное сочетание клавиш CTRL+B, и проект начнёт собираться под платформу, указанную в «*.pro»-файле. При сборке, а точнее на этапе линковки, могут возникнуть предупреждения:

warning: sh_link not set for section `.ARM.exidx'



Предупреждения, на которые не стоит обращать внимание

И некоторые другие предупреждения, но они не являются ошибками и не влияют на исполняемый файл.

Если все прошло отлично, а оно и должно так пройти, если внимательно выполнялись все необходимые команды в процессе прочтения этой статьи, то в папке «~/Projects/build-zTextEdit_magx-MotoMagX-Debug» у вас будет создан исполняемый файл с именем «zTextEdit_ZN5.magx». Или с именем «zTextEdit_E8.magx», в зависимости от выбранной вами платформы в файле проекта. Для того, чтобы собрать релизную версию программы, необходимо с помощью сочетания клавиш CTRL+T переключится на релизную ветку и пересобрать заново весь проект. Теперь исполняемый файл «zTextEdit_ZN5.magx», который будет оптимизирован под процессор, можно забрать из папки «~/Projects/build-zTextEdit_magx-MotoMagX-Release», затем скопировать на карту памяти своего смартфона, вместе с необходимыми ресурсами из папки проекта, и запустить.

Подобным образом можно собирать и другие программы из транка code.google.com/p/open-mgx без особых изменений, например, отлично собирается программа zAudio.

Ура! Мы смогли подключить весь необходимый инструментарий и получили возможность разрабатывать приложения с графическим интерфейсом для смартфонов фирмы Motorola, работающих под управлением операционной системы MotoMAGX, в удобной среде разработки.

А что же на насчет консольных приложений, или приложений, графический интерфейс которых не использует библиотеки Qt/Embedded, а базируется, например, на SDL? Возможно ли использовать Qt Creator для разработки и компиляции этих приложений? Несомненно! Ниже, в разделе статьи, посвящённой подключению к Qt Creator’у тулчейна для архитектуры mips, будет представлен кросс-платформенный проект, который можно будет собрать и для любого устройства платформы MotoMAGX, просто выбрав необходимый Kit в IDE.

<< Перейти к содержанию

4.3. Dingux/OpenDingux, архитектура mips

В операционной системе Dingux или в ее открытой реализации OpenDingux не используется каких-либо библиотек Qt. Весь интерфейс построен на использовании библиотеки SDL и в основном представлен такими простенькими оболочками, как DMenu или GMenu2x. Под управлением OpenDingux/Dingux работает несколько интересных устройств, среди которых наиболее популярными являются Dingoo A320 и распространяемый на просторах нашей страны Ritmix RZX-50. Последний отличается более продвинутым железом и широкоформатным экраном. Но не смотря на железные отличия, RZX-50 может запускать приложения своего предшественника Dingoo A320, коих написано великое множество. Как и оболочки, практически все приложения для этих игровых устройств написаны с использованием SDL-библиотеки.



Ritmix RZX-50 — одно из устройств, использующее операционную систему Dingux

Помимо этих устройств, стоит еще отметить новый GCW Zero, в котором присутствует видеоускоритель и используется более современный процессор. Насколько мне известно, он не может запускать приложения своих предшественников, хотя я могу ошибаться. GCW Zero — это фактически игровая консоль, сделанная гиками для гиков. Собрав достаточную сумму для реализации проекта на Kickstart’ере, создатели этого устройства начали его разработку и теперь любой желающий может заказать GCW Zero в нескольких интернет магазинах, список которых можно увидеть здесь.

Но мы будем собирать фреймворк Qt 4.8.5 для операционной системы OpenDingux и устройств Ritmix RZX-50 и Dingoo A320, поскольку они используют одинаковый набор инструментов для разработки, и SDL-приложение, единожды скомпилированное таким тулчейном будет работать как в Dingux, так и в OpenDingux на обоих устройствах. К сожалению, Qt-приложение скомпилированное этим тулчейном, будет работать только в операционной системе OpenDingux, ниже я напишу причину того, из-за чего Qt-программы отказываются запускаться в Dingux.

Железная составляющая устройств такова:

  • CPU: Ingenic JZ4732 @ 336 MHz (Dingoo A320), Ingenic JZ4755 XBurst @ 400 MHz (Ritmix RZX-50), оба процессора используют архитектуру MIPS.
  • RAM: 32MB (Dingoo A320), 64MB (Ritmix RZX-50).

<< Перейти к содержанию

4.3.1. Установка Toolchain & SDK для платформы Dingux/OpenDingux

Инструментарий для разработки приложений под Dingux или OpenDingux можно загрузить с официальной странички Ritmix’а RZX-50:
[ => DOWNLOAD | СКАЧАТЬ (~100MB) <= ]
С помощью команд:

Установим наш инструментарий в директорию «/opt». Как вы могли заметить , в отличие от тулчейна под MotoMAGX, тулчейн под Dingux имеет в своем распоряжении современные версии компиляторов и библиотек. Например, используется кросс-компилятор mipsel-linux-uclibc-gcc версии 4.3.3. К сожалению это не избавляет нас от применения патчей к исходному коду библиотеки Qt 4.8.5.

Для того, чтобы иметь возможность воспользоваться кросс-компилятором, просто написав его имя в терминале, нужно добавить в переменную окружения «${PATH}» путь до него. Для этого необходимо создать специальный скрипт «setenv-mips.sh» и поместить его в папку «~/Projects». Все это можно сделать такими командами:

При выполнении которых создастся скрипт, который впоследствии может понадобится нам при компиляции как библиотеки Qt, так и некоторых других проектов. На этом установка SDK для платформы Dingux/OpenDingux завершена и можно переходить к компиляции фреймворка Qt.

<< Перейти к содержанию

4.3.2. Конфигурирование и сборка библиотеки Qt под mips (OpenDingux)

Для компиляции потребуются чистые, непатченные исходники Qt, поэтому удалите существующие из директории «/tmp» (если они у вас там есть), и начните распаковку заново:

К сожалению, в операционной системе Dingux используется ядро с выключенными «Unix Sockets», поэтому мы будем собирать библиотеку Qt под систему OpenDingux. Вообще имеется достаточно грязный хак, позволяющий запустить Qt-приложение в системе Dingux, но проку от такого приложения будет мало, поскольку в Dingux банально не будет работать курсор мышки. Этот способ заключается в том, что нам придётся собрать библиотеку Qt особым образом, выключив поддержку QWS. Стандартными способами его не отключить, но если начать конфигурирование библиотеки не поместив кросс-компилятор в переменную окружения «${PATH}», это завалит все тесты и отключит QWS. После этого можно спокойно подгрузить кросс-компилятор и начать сборку библиотеки. Подлинковав эту библиотеку к Qt-приложению его станет возможно запускать и в среде Dingux. Но лучше всего собрать версию библиотеки для OpenDingux, поскольку там есть возможность переключить управление на мышку, поэтому продолжим:

Немного изменим префикс кросс-платформенных утилит в одном из конфигурационных файлов, в соответствии с их названиями представленными в нашем SDK. В этом нам поможет утилита sed:

sed -i 's/mips-linux-/mipsel-linux-/g' mkspecs/qws/linux-mips-g++/qmake.conf

Эта команда поправит строки в конфигурационном файле «qmake.conf», где прописаны некоторые правила сборки, и библиотека Qt впоследствии успешно соберётся.

Для успешной компиляции нам придётся применить к исходному коду следующий патч: qt-pthread_getattr_np.patch
Примечание. Загрузить патч следует в каталог «~/Downloads».

Находясь в каталоге с исходниками, выполним команду:

patch -p1 < ~/Downloads/qt-pthread_getattr_np.patch

Благодаря которой пофиксится файл «Collector.cpp», это поможет нам избежать следующей ошибки при компиляции:

'pthread_getattr_np' was not declared in this scope

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

Обратите вниманию на точку перед скриптом, обновляющим окружение, она важна! А пока выполняется процесс конфигурирования, расскажу о некоторых флажках в этой команде. Флаги little-endian и host-little-endian определяют порядок байтов, используемых на целевой и хостовой платформе. Флажок qt-gfx-transformed говорит о включении в сборку Qt специального плагина, который может трансформировать изображение на дисплее. embedded с параметром mips задаёт архитектуру целевой платформы, static включает сборку только статических библиотек, ну а prefix задаёт путь установки собранной библиотеки и инструментария. qt-x, где «x» — определённая библиотека говорит о том, что эта библиотека будет браться из Qt, а не из системы.

После окончания процесса конфигурирования, выполним сборку библиотеки дав на исполнение команду:

make -jN

Где «N» рассчитывается как «N = количество ядер в вашем процессоре + 1». После нажатия клавиши Enter начнётся процесс сборки фреймворка Qt, по времени продолжающийся приблизительно 30-40 минут.

После успешной сборки необходимо запустить команду:

sudo make install

Чтобы собранные библиотеки установились в необходимый нам каталог.
Итак, мы успешно собрали библиотеку Qt для платформы OpenDingux и теперь можем подключить её и SDK для OpenDingux/Dingux к Qt Creator. Утилита qmake из инструментария Qt позволит нам создавать и компилировать проекты как и для OpenDingux, так и для Dingux. Но следует заметить, что проекты, использующие скомпилированную нами библиотеку Qt будут работать только в OpenDingux. Однако нам ничего не мешает разрабатывать в Qt Creator не-Qt приложения.

<< Перейти к содержанию

4.3.3. Настройка Qt Creator для работы с тулчейном mips и Dingux SDK

Для подключения собранного фреймворка Qt и SDK для Dingux/OpenDingux к Qt Creator необходимо выбрать в главном меню программы «Tools» -> «Options…» -> «Build & Run» и перейти на вкладку «Compilers».

На этой вкладке мы можем добавить наш кросс-компилятор mipsel-linux-uclibc-gcc. Для этого нажимаем кнопку «Add» и выбираем в выпадающем списке пункт «GCC». Ниже должны появится несколько полей для ввода параметров. Назовём компилятор «MipsGCC», отредактировав первое поле. Затем с помощью кнопки «Browse…» указываем путь к кросс-компилятору mipsel-linux-uclibc-gcc, это «/opt/mipsel-linux-uclibc/usr/bin/mipsel-linux-uclibc-gcc-4.3.3». Нажимаем кнопку «Apply» и переходим к следующей вкладке.



Добавление компилятора MipsGCC в Qt Creator

На вкладке «Qt Versions» с помощью кнопки «Add» мы должны выбрать собранный нами qmake, расположенный по пути «/opt/QtSDKs/Qt4.8.5-mips-static/bin/qmake». Должна определиться версия собранного нами фреймворка Qt как «Qt version 4.8.5 for Embedded Linux». Теперь нажимаем кнопку «Apply» и двигаемся дальше.



Добавляем Qt-фреймворк, скомпилированный для mips

Теперь нужно объединить добавленные нами инструменты в один единый инструментарий. Для этого на вкладке «Kit» с помощью кнопки «Add» добавляем новый Kit и называем его «Dingux». В выпадающем меню в пункте «Compiler» выбираем «MipsGCC», в следующем поле устанавливаем кросс-платформенный дебаггер, путь до которого «/opt/mipsel-linux-uclibc/usr/bin/mipsel-linux-uclibc-gdb» и выбираем собранную нами версию фреймворка Qt.



Создание инструментария Dingux

Нажимаем кнопку «OK» и перезапускаем Qt Creator.
При желании можно добавить путь к Qt-инструментарию в скрипт подгрузки компиляторов:

echo 'export PATH=/opt/QtSDKs/Qt4.8.5-mips-static/bin:$PATH' >> ~/Projects/setenv-mips.sh

На этом настройка среды завершена и мы можем переходить к сборке каких-либо проектов для Dingux и OpenDingux.

<< Перейти к содержанию

4.3.4. Сборка проектов для платформы Dingux/OpenDingux в Qt Creator

Поскольку о написании приложений с использованием собранной нами библиотеки Qt 4.8.5 для Embedded Linux (OpenDingux и MotoMAGX) будет рассказано в другом разделе, я предпочту рассказать здесь о разработке и сборке кросс-платформенного приложения для платформ Dingux/OpenDingux, основой которого является библиотека SDL. Именно на этой библиотеке и базируется весь нативный интерфейс обеих операционных систем. Так как устройства использующие эту ОС по своей сути являются игровыми, мы будем работать тоже с игрой.

Итак, встречайте NXEngine, автором которого является Caitlin Shaw (rogueeve). NXEngine по своей сути является альтернативной реализацией движка замечательной инди-игры Cave Story, с открытыми исходными кодами. И мы попробуем собрать этот движок с помощью настроенного инструментария для устройства Ritmix RZX-50.

В начале получим необходимые исходники. Но получать мы их будем не с официального сайта, а из моего git-репозитория. Мой форк NXEngine содержит необходимые фиксы для широкоформатного экрана, используемого в Ritmix RZX-50 и проектный файл «nx.pro», благодаря которому можно открыть исходные коды этого движка в Qt Creator. Получить необходимые нам исходные файлы можно прямо из IDE. Для этого нажимаем в Qt Creator запускаем мастер создания новых проектов, нажав CTRL+N. В появившимся окне выбираем пункт «Import Project» -> «Git Repository Clone» и нажимаем кнопку «Choose…».



Мастер создания новых проектов в Qt Creator

В поле «Clone URL» вводим следующий адрес «https://github.com/EXL/NXEngine.git», нажимаем маленькую кнопку, на которой изображена зелёная закруглённая стрелка, а затем кнопку «Next >», дожидаемся окончания процесса получения исходного кода и нажимаем кнопку «Finish»



Получаем исходники из git-репозитория в Qt Creator

Откроется окно конфигурирования проекта, в котором можно выбрать все имеющиеся в распоряжении Qt Creator тулкиты.



Выбор набора инструментов для сборки NXEngine

При желании, можно выбрать не только набор инструментов «Dingux», но и «Desktop» или «MotoMagX». Или отметить сразу все. Далее нажимаем кнопку «Confugure Project» и проект успешно откроется в Qt Creator.



Открытый проект NXEngine в среде разработки Qt Creator (кликабельно)

По дефолту, при нажатии сочетания клавиш CTRL+B, проект будет компилироваться для нашего компьютера. Но пока у нас нет необходимых заголовочных файлов от SDL-библиотек, у нас не выйдет его собрать. Давайте их установим, зайдя в терминал и выполнив команду:

sudo apt-get install libsdl1.2-dev libsdl-mixer1.2-dev libsdl-image1.2-dev libsdl-ttf2.0-dev

После выполнения этой команды можно снова нажать CTRL+B и проект должен успешно собраться. Чтобы запустить NXEngine у себя на компьютере, необходимо подсунуть ему недостающие data-файлы командой:

А затем скачать этот архив и распаковать его содержимое в «~/Projects/build-nx-Desktop-Debug/»:

После этого можно нажать CTRL+R в Qt Creator и запустить собранную нами игру. Таким образом мы собрали игру для хоста. А что же насчёт Ritmix RZX-50?! Просто выберите с помощью комбинации клавиш CTRL+T и стрелочек инструментарий «Dingux» и ветку «Release», а затем пересоберите проект, выбрав в меню «Build» -> «Rebuild project [nx]»! После выполнения процесса сборки в папке «~/Projects/build-nx-Dingux-Release» должен появиться файл «nx.dge», который можно скопировать на устройство (не забыв о data-файлах конечно) и запустить!



Запуск движка NXEngine на плате Ritmix RZX-50

При таком подходе разрабатывать и отлаживать приложения можно на хостовой машине, а потом собирать их релизные версии для целевой платформы. Этот подход сэкономит много времени. Итак, на этом всё. Вы можете скомпилировать NXEngine и для платформы MotoMAGX, просто выбрав необходимый инструментарий и пересобрав проект.

<< Перейти к содержанию

4.4. Qt-приложения для Embedded Linux (MotoMAGX, OpenDingux)

Наверняка вы заметили, что мы не использовали скомпилированный нами фреймворк Qt для написания каких-либо приложений под платформу MotoMAGX или OpenDingux. Из инструментария Qt была использована лишь утилита qmake для генерации платформозависимых Makefile’ов, и можно было бы обойтись лишь компиляцией оной, а не компилировать все библиотеки. Но раз уж мы их скомпилировали, почему бы не попробовать ими воспользоваться? Давайте проверим, можно ли будет запустить какое-нибудь кросс-платформенное приложение в системах MotoMAGX или OpenDingux?

Для своих экспериментов выберем приложение Calculator, которое можно открыть нажав в боковой панели Qt Creator’а пункт «Welcome», затем перейти на вкладку «Examples» и вбить в поисковой строке слово «calc». Поскольку Qt SDK у нас установлен в read-only директорию, при открытии проекта в диалоговом окне «Copy Project to writable location?» его нужно скопировать в нашу директорию проектов при помощи кнопки «Copy Project and Open».



Необходимое нам приложение Calculator, отмеченное красной рамкой

После того, как проект откроется в Qt Creator’е, мы можем немного его отредактировать для корректного запуска на OpenDingux, а точнее на устройстве Ritmix RZX-50. Во-первых, отредактируем файл «main.cpp», найдя в нем строку #57:

и заменив метод «showExpanded()» на:

Это развернёт контекст окна приложения на нашем устройстве в полный экран. Следующее изменение касается файла «calculator.qml». Изменим в нем строку #49 на следующую:

Что позволит нам вписать приложение в экран нашего устройства.

После сохранения изменений переключим Qt Creator на тулкит «Dingux» -> «Release» и запустим процесс сборки. После завершения компиляции в папке «~/Projects/build-calculator-Dingux-Release» должен появиться файл «calculator» внушительного размера (~25MB). Такой размер получился из-за статической линковки бинарника. Ну и еще из-за того, что наше приложение использует QML. Просто так Qt-приложение запуститься на OpenDingux не сможет: ему необходима установка некоторых специальных переменных окружения и доступ к шрифтам. Переменные окружения мы можем задавать с помощью скрипта, который непосредственно и будет запускать наш исполнительный файл. Скрипт запуска можно создать выполнив в терминале следующие команды:

Эти команды создадут файл «calculator.dge» в папке с исполнительным файлом «calculator» и зададут необходимые переменные окружения для успешного запуска программы. Я опишу их. Переменная QWS_DISPLAY задаёт устройство вывода и его физические размеры. QTDIR — это директория, в которой можно найти библиотеки Qt. Поскольку мы скомпилировали программу статически, необходимые библиотеки уже находятся в исполняемом файле, поэтому эту переменную можно задать как точку (как текущую директорию).
В директории, которая прописана в QT_QWS_FONTDIR, приложение будет искать шрифты для отображения текстовой информации. QWS_SIZE устанавливает физическое разрешение экрана.

Запуская Qt-приложение с флагом «-qws», мы фактически создаём с его помощью сервер, благодаря которому можно будет запускать несколько приложений одновременно и эффективно переключаться между ними. Поскольку на конечном девайсе отсутствует какая-либо оконная система (например, в RZX-50 нет X11, как в десктопном GNU/Linux), запущенное приложение будет являться одновременно и сервером для других Qt-программ. Эта очень полезная особенность, позволяющая нам запускать графические приложения без всяких там тяжеловесных иксов практически на голом Linux-ядре.
Примечание. Если вы запускаете несколько приложений, то лишь первому из них необходим флаг «-qws».

Теперь переходим к установке шрифтов. Нам понадобится лишь один (любой) шрифт формата TrueType «*.ttf». Скопируем его из папки, где у нас расположен Qt SDK для mips, в папку с программой. Это можно сделать с помощью команд:

Приложение «calculator» полностью готово для запуска на конечном Emdedded-устройстве. Соберём все файлы вместе, в одну папку:

Кстати, размер приложения можно существенно уменьшить стрипнув его исполнительный файл:

Получившийся исполнительный файл «похудел» на 3MB. К сожалению, запаковать его с помощью утилиты upx не получилось, хотя это бы сжало его до 7.1MB. В любом случае мы можем смело заливать папку «calc-rzx50» в память устройства, а после запустить на нём операционную систему OpenDingux.
После запуска OpenDingux’а нужно подключить USB-кабель к Ritmix RZX-50, затем с помощью терминала подключиться к устройству и запустить приложение на исполнение:

После выполнения этих команд на Ritmix RZX-50 должно запуститься приложение «calculator», управлять которым можно только с помощью курсора. Переключить устройство в режим работы с курсором можно одновременно сдвинув ползунок выключения влево и нажав кнопку «B». Выход из приложения осуществляется по клику на кнопку «Off», расположенную на самом экране.



QML-приложение Calculator, запущенное на Ritmix RZX-50

Конечно, с Qt-приложениями не так интересно работать на устройстве с маленьким экраном у которого к тому же отсутствует тачскрин. Но с помощью технологии Qt Quick и языка QML можно реализовать неплохой динамичный App Launcher, управляющийся с помощью кнопок устройства. Вот только где взять на это время? Увы, написание качественного лаунчера с нуля займёт несколько недель. На этой ноте полностью покончим с Ritmix RZX-50 и займёмся устройствами на платформе MotoMAGX.

К сожалению, тут все совсем плохо. Хотя в ядре на этой платформе и включена поддержка Unix-сокетов, запуску нашего Qt-приложения будет мешать та версия Qt/Embedded, которая уже там используется в качестве оболочки. Ради эксперимента мы можем попробовать перед запуском убить приложение windowsserver, которое как раз и мешает развернуться другому qws-серверу на MotoMAGX:

Но это, конечно, не выход из положения, ибо выполнив эту команду мы полностью лишим смартфон возможности в дальнейшем общаться с пользователем. Выход из такого положения видится лишь один — самостоятельно патчить библиотеку на совместимость с древней версией Qt/Embedded, что очень и очень неблагородное занятие.

Таким образом лишь на одной платформе из рассмотренных нами можно хоть как-то воспользоваться Qt-приложениями. Но так уж сложилось, что OpenDingux не совсем доделанная система. К примеру, в ней полностью отсутствует звук. К счастью, чтобы разрабатывать и собирать проекты в Qt Creator нам вовсе не нужно обязательно пользоваться Qt-библиотекой. Да и её использование на таких устройствах слишком избыточно и нецелесообразно. Если вы хотите посвятить себя разработке софта под Embedded Linux -платформы, лучше всего для таких целей прикупить какой-нибудь Raspberry Pi или любую другую достаточно популярную плату.

<< Перейти к содержанию

5. Полезные советы при работе с Qt Creator

Qt Creator, на мой взгляд, одна из самых продвинутых интегрированных сред разработки для языка C++ или связки Qt и C++. Вообще кросс-платформенных IDE для этого языка существует не так уж и много. Из наиболее продвинутых и сравнимых с уровнем Qt Creator, можно выделить лишь несколько интегрированных сред. Во-первых, Eclipse — это мощнейший кросс-платформенный инструмент, написанный на Java, которым пользуется огромное количество разработчиков. Но лично мне кажется странным написание IDE для C++ на языке, отличном от C++. Еще есть KDevelop и Code::Blocks, но они не так активно развиваются. Поэтому выбор не слишком велик. По-крайней мере в GNU/Linux. Если выбирать инструмент под Windows, то тут конкурировать с Visual Studio, конечно, довольно сложно, но можно. Поэтому перечислю наиболее значимые для меня преимущества Qt Creator:

  • Регулярное обновление раз в два-три месяца.
  • Отличная навигация по документации.
  • Отличная скорость работы и запуска в сравнении с другими IDE.
  • Возможность абстрагироваться от Qt или C++, возможность разрабатывать приложения с использованием различных фреймворков.
  • Работа на различных программных платформах.
  • Возможность написания собственных сниппетов из коробки.
  • Продуманный дизайн управляющих элементов, ничего лишнего и нет моря непонятных кнопок.

К сожалению, в Qt Creator под Windows нельзя прицепить мощный анализатор выполнения нативного кода. В GNU/Linux и Mac с этим проблем нет: там в качестве бэкенда для поиска утечек памяти используется Valgrind.

Как было сказано выше, в отличие от других сред разработки, в Qt Creator небольшое количество управляющих элементов и большинство действий лучше всего выполнять с помощью горячих клавиш. Поэтому я перечислю основные хоткеи, которые облегчат жизнь каждому пользователю Qt Creator:

Сборка и запуск:

  • CTRL+B — собрать текущий проект.
  • CTRL+SHIFT+B — собрать все открытые проекты.
  • CTRL+R — собрать и запустить текущий проект на исполнение.
  • CTRL+ALT+B — собрать текущий файл.

Дебаггинг:

  • F5 — запустить дебаггер.
  • SHIFT+F5 — остановить дебаггер.
  • F10 — выполнить строку не входя в неё.
  • F11 — выполнить строку, перейдя в неё (step in).
  • SHIFT+F11 — выйти из блока кода/функции, выполнив код до конца (step over).
  • CTRL+F10 — выполнить строку.
  • CTRL+F6 — выполнить функцию.
  • F9 — поставить точку останова.

Редактор:

  • CTRL+X — выполнить откат изменения.
  • CTRL+Y / CTRL+SHIFT+Y — выполнить откат отката.
  • CTRL+M — добавить закладку на строку
  • F4 — переключиться между объявлениями и реализациями (между *.h и *.cpp).
  • F2 — переключиться между объявлением метода и его реализацией.
  • CTRL+SHIFT+R — глобальная замена слова под курсором (в рамках одного проекта).
  • CTRL+L — перейти на строку.
  • CTRL+E, F4 — открыть *.h или *.cpp рядом в сплите.
  • CTRL+E, F2 — открыть объявление метода рядом в сплите.
  • ALT+C, ALT+P — выложить выделенный код на pastebin.com и получить линк.
  • CTRL+SHIFT+U — найти используемый текст в проекте.
  • CTRL+SHIFT+F — расширенный поиск с регулярными выражениями.
  • ALT+G, C — git commit.
  • ALT+G, D — git diff (file).
  • ALT+G, ALT+SHIFT+D — git diff (project).
  • CTRL+I — выровнять выделенный текст.
  • CTRL+/ — закомментировать выделенный текст.
  • CTRL+SPACE — вызвать автодополнение кода.
  • CTRL+INS — скопировать строку кода.
  • SHIFT+DEL — удалить строку кода.
  • CTRL+J — объединить строку под курсором с той, что ниже.
  • ALT+U — понизить регистр выделенного текста.
  • ALT+SHIFT+U — повысить регистр выделенного текста.
  • CTRL+SHIFT+UP/DOWN — переместить строку под курсором вверх/вниз.
  • CTRL+E, R — выровнять массив.
  • CTRL+U — выделить блок.
  • CTRL+</> — скрыть/раскрыть блок кода.
  • CTRL+SHIFT+V — вставить текст из истории буфера обмена.

Зажав клавишу CTRL и наведя курсор мышки на интересующую вас переменную, объект или метод — можно перепрыгнуть на его объявление. Qt Creator не использует вкладки для перемещения по открытым файлам проекта, однако у вас всегда есть возможность нажав CTRL+TAB или CTRL+SHIFT+TAB переместится в необходимый открытый файл. Кроме этого есть возможность с помощью ALT+LEFT или ALT+RIGHT перемещаться по истории вашей навигации по коду. По сочетанию клавиш CTRL+K открывается специальное командное меню, идея которого, скорее всего была взята из vim’а. Благодаря этому меню можно быстро перемещаться по файловой системе, поискать что-то в гугле или посмотреть все доступные методы/классы в проекте. Помимо этого существует возможность запуска внешних команд из системы.



Ресурс habrahabr.ru, открытый в Qt Creator (кликабельно)

Еще в Qt Creator есть режим редактирования кода FakeVim, который включается или отключается с помощью комбинации ALT+V, V. Иногда он очень выручает, позволяя всю рутинную работу выполнить в две-три команды. Конечно, он немного отличается от обычного vim’а, но тоже весьма функционален. Даже есть возможность подгрузить свою конфигурацию с помощью «.vimrc»-файла.

Как видите, Qt Creator действительно мощный инструмент, позволяющий разрабатывать и поддерживать весьма сложные проекты. Несмотря на то, что эта IDE заточена под использование билиотеки Qt, её гибкость и возможность работы с самыми различными инструментами, фреймворками и компиляторами просто поражает. В этой статье мы смогли без труда подключить Qt Creator к старому тулчейну MotoMAGX и иметь возможность разрабатывать в нем графические приложения для этой платформы. Жаль конечно, что система интерактивного построения графических интерфейсов, наподобие используемой в Qt Designer, отсутствует для MotoMAGX.

Благодаря данной статье можно получить отличный инструмент для кросс-платформенной разработки. По аналогии можно подключить не только тулчейны от MotoMAGX или Dingux, но и вообще от любой другой платформы. И даже совсем неважно, возможно ли запускать на ней Qt-приложения или нет. На этом я завершаю статью, надеюсь вы сможете освоить в полной мере этот замечательный инструмент.

<< Перейти к содержанию

6. Полезные ссылки и ресурсы для изучения фреймворка Qt

Несмотря на то, что в Qt Creator можно воспользоваться мощнейшей offline-документацией (просто перейдите на вкладку «Help» и попробуйте), в интернете всегда можно найти свежую версию доков или получить онлайн-помощь, например, создав тему с вопросом на форуме.

Ресурсы:

  • qt-project.org — официальный ресурс на котором можно всегда найти свежую online-документацию.
  • qt-project.org/forums — официальный форум, где можно задать интересующие вас вопросы и получить помощь.
  • planet.qt-project.org — лента постов из блогов различных разработчиков как библиотеки Qt, так и связанных проектов.
  • blog.qt.digia.com — официальный блог разработчиков фреймворка Qt.
  • habrahabr.ru/hub/qt_software — Хаб на популярном IT-ресурсе, посвященный разработке приложений с использованием этой библиотеки.
  • qtlinux.narod.ru — ресурс, публикующий отличные туториалы и статьи в поддержку Qt на русском языке.

Для того, чтобы научиться писать программы с использованием фреймворка Qt, необходимо сначала подтянуть знания в C++, и особенно, объектно-ориентированное программирование.

Книги C++:

Книги Qt:

Полезные статьи:

<< Перейти к содержанию