QT 4: программирование GUI на С++
Шрифт:
Глава 21. Программирование встроенных систем
Разработка программного обеспечения для таких мобильных устройств, как карманные компьютеры и мобильные телефоны, может представлять собой очень сложную задачу, поскольку встроенные системы обычно имеют более медленные процессоры, меньший объем постоянной памяти (на флеш-картах или на жестких дисках), меньший объем основной памяти и дисплеи меньшего размера, чем настольные компьютеры.
Система Qtopia Core (ранее она называлась Qt/Embedded) — это версия Qt, оптимизированная для разработки встроенных систем под Linux. Qtopia Core имеет такие же утилиты и
Qtopia Core может работать на любом оборудовании, функционирующем под управлением Linux (включая архитектуры Intel x86, MIPS, ARM, StrongARM, Motorola 68000 и PowerPC). Эта система имеет буфер фреймов основной памяти, отображаемой на дисплей, и поддерживает компилятор С++. В отличие от Qt/X11, она не нуждается в системе X Window; вместо этого в ней реализуется собственная оконная система (own window system — QWS), которая приводит к значительной экономии постоянной и основной памяти. Для еще большего уменьшения расхода памяти можно перекомпилировать Qtopia Core и исключить неиспользуемые возможности. Если заранее известны используемые устройством приложения и компоненты, они могут быть скомпилированы совместно в один исполняемый модуль и собраны статически с библиотеками Qtopia Core.
Кроме того, Qtopia Core использует преимущества многих функций, присущих также версиям Qt для настольных компьютеров, в частности широко применяется неявное совместное использование данных («копирование при записи») как метод экономии основной памяти, поддерживаются пользовательские стили виджетов с помощью класса QStyle и обеспечивается система компоновки виджетов, позволяющая максимально использовать пространство экрана.
Qtopia Core представляет собой базовый компонент, на котором строятся другие предложения по встроенным системам компании «Trolltech»; к ним относятся Qtopia Platform, Qtopia PDA и Qtopia Phone. Они содержат классы и приложения, специально предназначенные для мобильных устройств и способные интегрироваться с некоторыми виртуальными машинами Java независимых разработчиков.
Первое знакомство с Qtopia
Приложения Qtopia Core могут разрабатываться на любой платформе, позволяющей запускать цепочки многоплатформенных инструментальных средств. Наиболее распространено построение кросс-компилятора GNU С++ в системе Unix. Этот процесс упрощается благодаря наличию скрипта и набора пакетов обновлений Дана Кегеля (Dan Kegel), доступного на веб-страницеПоскольку Qtopia Core имеет программный интерфейс Qt, в большинстве разработках, как правило, можно использовать версию Qt для настольных компьютеров, например Qt/X11 или Qt/Windows.
Система конфигурации Qtopia Core поддерживает кросс-компиляторы с помощью опции —embedded скрипта configure. Например, для построения ARM—архитектуры мы могли бы ввести команду
Можно создавать пользовательские конфигурации путем добавления новых файлов в каталог Qt mkspecs/qws.
Qtopia Core рисует непосредственно в буфере фреймов системы Linux (область основной памяти, связанная с дисплеем). Для обращения к буферу фреймов, возможно, потребуется получить разрешение для записи на устройство /dev/fb0.
Для выполнения приложений Qtopia Core сначала необходимо запустить один процесс, выполняющий функции сервера. Этот сервер отвечает за распределение между клиентами областей экрана и за генерацию событий мышки и клавиатуры. Любое приложение Qtopia Core может стать сервером, если в командной строке указать опцию —qws или в качестве третьего параметра конструктора QApplication передать QApplication::GuiServer.
Клиентские
Клиенты могут связываться друг с другом при помощи протокола QCOP. Клиент может прослушивать именованный канал, создавая объект QCopChannel и устанавливая связь с его сигналом received. Например:
Сообщение QCOP состоит из имени и необязательного массива QByteArray. Статическая функция QCopChannel::send передает в широковещательном режиме сообщение по каналу. Например:
Предыдущий пример иллюстрирует общий прием: для кодирования данных используется поток QDataStream, и для гарантирования правильной интерпретации получателем массива формат данных в сообщении принимает вид функции С++.
На работу приложений Qtopia Core влияют различные переменные среды. Наиболее важными являются QWS_MOUSE_PROTO и QWS_KEYBOARD, которые определяют тип устройства мышки и клавиатуры. Полный список переменных среды приводится на веб-странице http://doc.trolltech.com/4.1/emb-envvars.html.
Если в качестве платформы разработки используется Unix, приложение можно тестировать с использованием виртуального буфера фреймов Qtopia (qvfb) — приложения X11, которое имитирует пиксель за пикселем реальный буфер фреймов. Это значительно сокращает цикл разработки. Для включения поддержки в Qtopia Core виртуального буфера необходимо передать опцию —qvfb скрипту configure. Следует помнить, что эта опция не предназначена для промышленного применения. Приложение виртуального буфера фреймов располагается в каталоге tools/qvfb и может вызываться следующим образом:
Другой опцией, работающей на большинстве платформ, является VNC (Virtual Network Computing — вычисление в виртуальной сети), которая используется для удаленного выполнения приложения. Для включения поддержки VNC в Qtopia Core передайте опцию —qt—gfx—vnc в скрипт configure. Затем запустите ваше приложение Qtopia Core с опцией командной строки —display VNC:0 и клиента VNC, ссылающегося на хост, на котором выполняется ваше приложение. Размер экрана и разрядность цвета можно установить с помощью переменных среды QWS_SIZE и QWS_DEPTH на хосте, на котором выполняются приложения Qtopia Core (например, QWS_SIZE=320x480 и QWS_DEPTH=32).