• /
  • /

С++ фреймворк Qt для разработки встраиваемых систем: за, против, альтернативы

Узнайте больше о преимуществах использования фреймворка Qt и языка C++ для встраиваемых систем. Мы подготовили для вас обзор популярных GUI-инструментов для кроссплатформенной разработки, а также рассказываем о нашем опыте использования Qt в проектах.
Технический директор
Андрей Соловьев
Существует множество фреймворков для решения различных задач. В этой статье мы сосредоточимся на Qt, одном из самых популярных на сегодняшний день фреймворков. Мы хотели бы поделиться нашим опытом и рассказать о плюсах и минусах использования Qt для разработки встраиваемого ПО.

Кроссплатформенная разработка для встраиваемых систем

Кроссплатформенные наборы инструментов позволяют разработчикам создавать программные продукты для нескольких платформ. Задача специалистов — адаптировать одно приложение под разные операционные системы.

По сравнению с нативными кроссплатформенные приложения имеют ряд неоспоримых преимуществ:

  • Более доступная по цене разработка;
  • Один код для нескольких платформ, но каждая сборка создает отдельный исполняемый файл;
  • Выше скорость разработки;
  • Проще реализация.

Разработчики используют фреймворки — специальные инструменты и библиотеки для быстрого создания приложений. Фреймворки могут иметь компиляторы, библиотеки кода и API для создания программного обеспечения.

Qt и C++

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

C++ поддерживает объектно-ориентированное программирование (ООП), что дает множество преимуществ при создании графических интерфейсов (GUI). ООП делает процесс создания и тестирования приложения быстрее, проще и безопаснее.

Преимущество C++ не только в поддержке объектно-ориентированного программирования. Исходный код C++ компилируется в непереносимый объектный код. Иными словами, C++ поддерживает принцип "Написать один раз, компилировать где угодно" (WOCA).

Qt – это набор инструментов C++ для разработки приложений и графических пользовательских интерфейсов. Он подходит для встроенных систем как с пользовательским интерфейсом, так и без него. Qt поддерживает различные платформы, включая мобильные (Android, iOS), настольные (Windows, Linux, macOS) и встроенные (Embedded Linux, Embedded Android, Windows Embedded, QNX и т. д.).

Qt создан норвежскими программистами в начале 1990-х годов. В настоящее время его разрабатывают The Qt Company и The Qt Project. Последний представляет собой союз компаний и частных лиц, работающих над продвижением Qt.

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

КЕДР Solutions занимается разработкой мультиплатформенных программных продуктов на Qt уже более 9 лет. Обратитесь к нашим специалистам, и мы поможем вам создать мобильное или десктопное приложение для встраиваемых систем.

Лицензия

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

Если ваш проект подразумевает дистрибуцию пакета с открытым исходным кодом или не предполагает никакой дистрибуции, то вам подойдет лицензия с открытым исходным кодом, например, LGPL3, GPL2 или GPLv3.

Инструменты Qt

Полезные модули делают этот фреймворк одним из самых удобных для разработки кроссплатформенных приложений. Qt предоставляет специализированные инструменты, необходимые для проектирования, разработки и настройки приложений на встроенных платформах. Перечислим некоторые из них.

Qt поставляется с интегрированной средой разработки (IDE) Qt Creator. Эта IDE упрощает работу или модификацию приложений с графическим интерфейсом. Qt Creator применяется для создания программного обеспечения на C++, QML и JavaScript.

Вы также можете использовать стороннюю среду разработки.
Скриншот среды разработки Qt Creator
Скриншот Qt Creator
Qt Designer — это оригинальный встроенный дизайнер графического интерфейса. Его можно использовать и как самостоятельное средство.

Qt Design Studio — это урезанная версия Qt Creator. Среда предлагает набор 2D/3D-инструментов для создания интерфейсов UI/UX и HMI. Qt Design Studio позволяет дизайнерам и разработчикам повысить уровень взаимодействия, работая в одном фреймворке с одним общим языком.

QML, декларативный язык Qt, позволяет разработчикам легко и быстро создавать пользовательские интерфейсы. UI элементы, написанные на QML, можно интегрировать с логикой, написанной на C++. Кроме того, QML предоставляет очень удобный способ разработки пользовательских интерфейсов для сенсорных экранов.

Qt для микроконтроллеров, Qt for MCUs 2.0, предоставляет разработчикам полную графическую среду и все необходимые инструменты для успешного проектирования, разработки и развертывания графических интерфейсов на микроконтроллерах. Использование продуктов Qt дает возможность запускать приложения как в операционных системах реального времени (RTOS), так и на «голом железе».

Qt предлагает программные модули и инструменты Automotive Suite для создания автомобильных информационно-развлекательных систем (IVI). Этот набор имеет встроенную среду разработки, а также инструменты для создания пользовательских интерфейсов, тестирования и отладки приложений.

У Automotive Suite есть модуль Qt Application Manager, который предоставляет API для независимой реализации пользовательского интерфейса и логики приложения. Он также предлагает высокоуровневый API, облегчающий системную UI разработку.

Модуль Qt GENIVI Extras отвечает за совместимость полученного продукта с архитектурой автомобильной платформы GENIVI.

Пользовательский интерфейс Neptune 3 является эталонной реализацией UI для Qt в автомобильных информационно-развлекательных системах (IVI).

Automotive Suite поставляется с Qt Design Studio, Qt 3D Studio, Qt Creator Deployment и другими инструментами, помогающими программистам создавать, устанавливать, поддерживать и отлаживать систему.
Схема взаимодействия компонентов Automotive Suite
Архитектура Automotive Suite, источник Блог Qt.
Компоненты промежуточного программного обеспечения, такие как API, серверные части и сервисы, могут быть разработаны с использованием инструментов и API, предоставляемых модулем Qt Interface Framework.

Модуль Qt Safe Renderer предоставляет компонент отрисовки пользовательского интерфейса. Qt Safe Renderer отделяет критически важный для безопасности рендеринг от других частей системы. Такой подход обеспечивает отображение важных для безопасности элементов пользовательского интерфейса в случае сбоев или нештатных ситуаций.

Qt и C++ для встроенных устройств

Большинство встраиваемых систем созданы с применением C/C++.

Что делает C++ таким востребованным для разработки встраиваемых систем?

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

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

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

  • Одним из самых больших препятствий для разработчиков, которые ранее не писали на C++, является его строгость, сложность и многословность. C++ труден для изучения.
  • Вторая проблема вытекает из первой: поддерживать кодовую базу может быть довольно сложно.
  • C++ может быть недостаточно гибким для веб-технологий.

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

Qt идеально подходит для встроенных приложений с графическим интерфейсом или без него. Этот фреймворк используется для создания приложений с GUI, которые могут работать на разных платформах. Кроме того, Qt позволяет быстрее разрабатывать высокопроизводительные приложения.

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

Встроенные системы, разработанные на Qt C++ работают на Linux, Windows и операционных системах реального времени (RTOS).

Некоторые из самых простых систем работают автономно, но большинство устройств подключено к облаку.

Системы получают информацию от многочисленных датчиков. Сложные встроенные системы выполняют оценку данных с датчиков, распознавание изображений или речи. Qt предлагает большое количество высокоуровневых API для встраиваемых устройств. Например, Qt Location API и Qt Sensors API помогают получить информацию, связанную с положением и местонахождением устройства.
Схема взаимодействия встраиваемой системы Qt с внешними источниками
Связь между встроенными системами Qt и внешними источниками.
Решения с менее мощными однокристальными системами (SoC) могут делегировать некоторые задачи облачным приложениям.

Контроллеры проверяют и регулируют многие параметры внутри устройства (например, температуру воды в стиральной машине или яркость экрана монитора) и передают данные в центр управления.

Преимущества Qt

КЕДР Solutions имеет большой опыт в создании кросс-платформенных приложений с использованием Qt. Перечислим качества фреймворка, которые повлияли на наш выбор.

  • Ключевым преимуществом Qt является возможность применять один и тот же код к различным платформам – десктопным, мобильным и встроенным.
  • Доступны как открытые, так и коммерческие лицензии. Мы в КЕДР Solutions обычно выбираем для проектов лицензию с открытым исходным кодом. Тем не менее по запросу клиента мы можем разрабатывать ПО по коммерческой лицензии Qt.
  • Подробная API документация, примеры, обучение, техническая поддержка и огромное сообщество делают Qt очень привлекательным для разработчиков.
  • Вы можете создавать программное обеспечение на том языке, который предпочитаете. Существует множество привязок к Qt для Python, Java, PHP, Go и т. д.
  • C++ – один из наиболее широко используемых языков программного обеспечения для встраиваемых систем.
  • Среда разработки Qt Creator с ее системой сборки и богатой архитектурой плагинов работает быстро, с минимальным временем отклика.

У КЕДР Solutions есть команда специалистов, которые пишут программы на C++, в том числе для встраиваемых систем. Мы находим Qt очень удобным фреймворком.

Наши проекты с применением Qt

Команда разработчиков обсуждает проект.
Обсуждение проекта
Количество проектов, в которых мы используем этот фреймворк, постоянно растет. Расскажем о недавних разработках встраиваемых систем.

Нашей задачей в одном из проектов было создать Android-приложение для отладки и настройки устройства заказчика. Устройство представляет собой барабан с колбами и оснащено системой распыления. Управление прибором осуществляется по BLE с помощью протокола, предоставленного заказчиком. Устройство предполагается использовать в сфере маркетинга и развлечений.

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

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

Нужно было также реализовать функцию видео плеера. Приложение должно воспроизводить видео файл и с помощью специального STK файла вычислять позицию в барабане и время распыления аромата.

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

Для реализации приложения мы выбрали стек С++/Qt/Qml, а также в некоторых местах использовался чистый Java код. Qt позволил достаточно быстро создать Android приложение со всем необходимым функционалом.

Модуль Qt Connectivity увеличил скорость разработки BLE части приложения за счет готовых реализаций низкоуровневой работы с Bluetooth, а модуль Qt Multimedia позволил быстро создать видео плеер с возможностью отслеживания позиций, перемотки и заполнения экрана.
Снимки экрана приложения, разработанного с помощью Qt
Скриншоты приложения
Задачей в другом проекте было создание устройства с датчиками для измерения расстояния до препятствий и разработка мобильного приложения для взаимодействия с устройствами.

Модуль радара должен был передавать облако точек по BLE, а микрокомпьютер Orange Pi должен был передавать изображение с CSI камеры по протоколу потоковой передачи в реальном времени RTSP по WiFi на Android планшет. Использование Qt первоначально предполагалось только для создания Android приложения.

В процессе работы выяснилась необходимость передачи облака точек по протоколу UART на микрокомпьютер, а затем на планшет.

Вторая сложность заключалась в том, что выбранный микрокомпьютер не мог корректно работать с Bluetooth и CSI камерой. Поэтому мы решили заменить Orange Pi на Raspberry Pi и реализовать клиентскую часть, которая работала бы на микрокомпьютере.

Новая концепция состояла в создании на планшете точки доступа WiFi с определенными идентификатором SSID и паролем. Устройство (ATPS модуль) при обнаружении WiFi сети с выбранным SSID автоматически подключается к ней.

ATPS модуль должен также реализовать GATT сервер, а мобильное приложение по BLE передавать свой IP адрес на устройство.

Видео поток с камеры передается по протоколу RTSP. Передачу данных, полученных от сенсора, мы перенесли на TCP соединение. Помимо данных, по TCP идут управляющие и информационные сообщения.

Первоначально клиентская часть разрабатывалась на Python, но в процессе работы возникли проблемы с производительностью. Решить их помог фреймворк Qt.

Фреймворк позволил быстро создать многопоточное приложение, которое работает как с BLE, так и с TCP без задержек на обработку данных. Qt также позволил использовать библиотеку Wiring Pi для коммуникаций с внешним зуммером и LED модулем, работающим по протоколу связи I2C.

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

Один из наших проектов с использованием фреймворка Qt был связан с сельским хозяйством. Перед нашими специалистами стояла задача разработать мобильное приложение для iOS и Windows для взаимодействия с различными микроконтроллерами и датчиками.
Схема созданного КЕДР Solutions с помощью Qt программно-аппаратного комплекса в агропромышленном секторе
Проект КЕДР Solutions в сфере сельского хозяйства
На сельскохозяйственные машины были установлены микроконтроллеры с датчиками для сбора телеметрических показателей. Приложение должно обрабатывать собранные данные в режиме реального времени.

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

Использование Qt для разработки приложения позволило нам сократить время выполнения заказа и уменьшить стоимость работ. Наше сотрудничество с заказчиком продолжается, мы дорабатываем приложение и добавляем новые функции.

Работая с Qt и C++, мы столкнулись с некоторыми недостатками фреймворка:

  • Оптимизация анимации в Qt непрозрачна.
  • Скорость графического интерфейса Qt низкая.
  • Интернализация графического интерфейса (I18N) далека от идеальной.
  • Для кросс-компиляции могут потребоваться дополнительные шаги.

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

Кроссплатформенные альтернативы Qt

Споры среди программистов о лучшем фреймворке никогда не утихнут. Каждый разработчик приводит свои аргументы в пользу той или иной платформы, и каждый по-своему прав.

Выбор той или иной структуры зависит от размера и цели проекта, опыта и компетентности разработчика, пожеланий заказчика.

Мы рассмотрим решения, подобные Qt, и выделим, для чего каждое из них подходит.
Кросс-платформенные фреймворки используются для разработки встраиваемых систем.
Процесс разработки ПО
.NET (dotNet) – платформа разработки от Microsoft.

Особенности платформы:

  • ПО с открытым исходным кодом;
  • Поддержка Windows, Linux и Mac OS X;
  • Поддержка языков C #, F # и Visual Basic;
  • Поддержка Visual Studio;
  • Сообщество разработчиков.

.Net — это модульное кроссплатформенное решение, основанное на .Net Framework. Каждый из его модулей можно обновлять по отдельности. Различные реализации dotNet помогают запускать его код на разных платформах.

Структура имеет широкий спектр компиляторов, библиотек и API для разработки и компиляции мобильных и игровых приложений.

Платформа dotNet подходит для модификации приложений и адаптации к потребностям компании.

.NET nanoFramework – это бесплатный фреймворк с открытым исходным кодом. Базируется на .NET и подходит для небольших встраиваемых устройств. .NET nanoFramework сочетает в себе гибкость, функциональность и высокую производительность.

Xamarin – это популярный инструмент для разработки кроссплатформенных мобильных приложений, поддерживающий концепцию «Написано один раз, работает везде» (WORA). Согласно Microsoft, «Xamarin расширяет платформу .NET с помощью инструментов и библиотек, специально предназначенных для создания приложений для Android, iOS, tvOS, watchOS, macOS и Windows».

Особенности Xamarin:

  • ПО с открытым исходным кодом;
  • Базируется на .Net;
  • Использует C#;
  • Располагает нативно скомпилированными инструментами;
  • Библиотека Xamarin Universal Library и сообщество Planet Xamarin предоставляют разработчикам важную информацию и полезные ресурсы.

Flutter – это платформа для разработки приложений с графическим интерфейсом, выпущенная Google в 2017 году. Поддерживает принцип WORA.

Особенностями платформы являются:

  • Поддержка Windows, Linux, Android, iOS и других ОС.
  • Поддержка языка Dart;
  • Совместимость с такими средами разработки, как Eclipse, Android Studio, Visual Studio Code и Intellij;
  • Коллекция визуальных, структурных, платформенных и интерактивных виджетов.

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

Java – один из самых популярных языков программирования в мире. Это независимый от платформы объектно-ориентированный язык. Все платформы Java поддерживают концепцию WORA.

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

С помощью Java можно разработать удобные масштабируемые приложения для встраиваемых систем. Этот язык безопасен благодаря поддержке шифрования конфиденциальной информации и подходит для проектов с графическим интерфейсом с несколькими экранами.

С другой стороны, Java сложен, и его эффективность не очень высока по сравнению с другими языками.

Для создания программ с графическим интерфейсом вы можете использовать GTK+.

Особенности инструментария:

  • Открытый исходный код (под лицензией Lesser General Public License (LGPL));
  • Мультиплатформенность;
  • Используется язык C;
  • Доступны привязки C++, dotNet и Python;
  • Совместимость с Windows, Linux и macOS.

У GTK+ есть несколько очевидных недостатков, таких как плохая обратная совместимость в основных обновлениях, отсутствие межплатформенной поддержки и отсутствие сообщества.

Simple DirectMedia Layer (SDL) – это кроссплатформенная библиотека для разработки программного обеспечения. Она предоставляет унифицированный программный интерфейс для обеспечения низкоуровневого доступа к аудио, клавиатуре, мыши, джойстику и графическому оборудованию через OpenGL и Direct3D. Мультимедийные приложения, разработанные с помощью SDL, могут работать на Android, Linux, Windows, macOS и iOS.

Особенности SDL библиотеки:

  • Открытый исходный код (под zlib лицензией);
  • Написана на C, C++ или Objective-C в зависимости от целевой платформы;
  • Доступны языковые привязки;
  • Поддержка нескольких окон;
  • 2D-графика с аппаратным ускорением;
  • Активно используется для кроссплатформенных мультимедийных программ (в основном игр).

С++ фреймворки для создания GUI

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

Рассмотрим преимущества и недостатки некоторых из них.

wxWidgets позволяет разработчикам создавать приложения для Linux, Windows и некоторых других сред.

Преимущества wxWidgets:

  • Открытый исходный код;
  • Не новый, но довольно быстрый инструмент;
  • Использует, где это возможно, собственные виджеты, чтобы обеспечить естественный внешний вид.
  • Имеет очень удобный конструктор wxCrafter.

Недостатки wxWidgets:

  • Сложность настройки.

FLTK (Fast Light Toolkit) – это кроссплатформенный C++ инструментарий для UNIX/Linux, Microsoft и Windows. FLTK поддерживает 3D графику. Доступен по лицензии LGPL за некоторыми исключениями.

Сильные стороны FLTK:

  • Легкий и простой дизайн и только функции графического интерфейса.
  • Онлайн поддержка;
  • Довольно быстрый.

Недочеты:

  • Использует ненативные виджеты;
  • Предоставляет меньше виджетов, чем другие платформы.

Кросс-платформенный С++ фреймворк JUCE поддерживает Windows, Linux, iOS, macOS и Android. JUCE распространяется на условиях лицензий GPL и ISC (в зависимости от модуля). Фреймворк бесплатный для индивидуальных разработчиков, стартапов и образовательных учреждений.

Преимущества JUCE:

  • Много функциональных возможностей при работе с аудио;
  • Легкий;
  • Платная версия дешевле Qt.

Недостатки:

  • Отсутствие четкой информации о фреймворке;
  • Бесплатная версия имеет ограниченный функционал.

Еще одной полезной платформой для быстрой разработки приложений на C++ является Ultimate++ (U++ или Upp). Она содержит GUI, SQL и другие библиотеки. Включает в себя среду разработки TheIDE. Полезные функции среды, такие как технология сборки BLITZ, позволяют ускорить перекомпиляцию C++.

Преимущества U++:

  • Поддержка Linux/Unix, Windows и macOS;
  • Прост в освоении и применении;
  • Средства визуального проектирования для U++ библиотек;
  • Анализатор кода C++;
  • Полезные руководства, сообщество и документация.

Недостатки:

  • ПО с закрытым исходным кодом;
  • Только C++.

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

Заключение

IT-индустрия предлагает нам множество фреймворков для кроссплатформенной разработки приложений. Выбрать лучший невозможно. Одна и та же задача может быть решена по-разному в зависимости от знаний, опыта и возможностей разработчика.

Qt – это C++ фреймворк для кроссплатформенной разработки приложений с графическим интерфейсом и без. Созданные с помощью Qt программные продукты можно компилировать на множестве других платформ.

Qt – это набор инструментов для виджетов, он позволяет нам создавать программное обеспечение с нативным графическим интерфейсом.

C++ – один из самых популярных языков для встраиваемых систем, а Qt – один из самых популярных C++ GUI фреймворков.

КЕДР Solutions имеет квалифицированный штат разработчиков Qt. Уровень знаний C/C++ и Qt наших специалистов очень высок. В портфолио компании много проектов, в которых Qt успешно используется для разработки встраиваемых систем. Qt постоянно совершенствуется и дополняется новыми полезными инструментами, позволяющими разработчикам эффективно и быстро решать задачи.
Другие статьи