Qt: фреймворк C++ для разработки кроссплатформенного программного обеспечения

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

Что такое Qt?

Неудовлетворенные инструментами для кроссплатформенной разработки программного обеспечения, два норвежца Хаавард Норд и Эйрик Чамбе-Энг начали разрабатывать Qt в 1990 году. Два года спустя они основали компанию Trolltech, которая была поглощена телекоммуникационной компанией Nokia, а в 2012 году — финской компанией Digia, занимающейся разработкой программного обеспечения. Дочерняя компания Digia, The Qt Company, отвечает за разработку с 2014 года.

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

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

Qt программируется на языке C++, где язык программирования расширен препроцессором MOC (meta-object compiler) такими возможностями, как элементарный сигнал и механизм слотов (обеспечивает управляемую событиями связь между объектами программы). Для этого препроцессор генерирует C++, соответствующий стандарту, из исходного кода Qt, еще до компиляции, что означает возможность перевода приложений Qt с текущими компиляторами C++, такими как GCC, ICC, MinGW или MSVC. Новые версии фреймворка также предлагают доступ к собственному языку разметки Qt — QML, что обеспечивает упрощение, особенно при разработке графических интерфейсов. Помимо этих внутренних языковых решений, существуют различные возможности подключения, предоставляемые сторонними поставщиками для других программных языков, таких как Python, Ruby, Go, Java и PHP.

С помощью qmake (стандартное решение) и Qbs (QtBuild Suite) фреймворк имеет две собственные системы сборки, при этом можно использовать и другие системы, такие как CMake. Пользователи также имеют собственную интегрированную среду разработки, Qt Creator, которая, помимо прочего, имеет редактор кода и обеспечивает быстрый доступ к выбранным компонентам.

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

Краткое описание наиболее важных компонентов Qt

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

Поскольку лишь очень немногие приложения на базе Qt используют полный набор функций, начиная с версии 4, фреймворк был разделен на модули, которые можно свободно выбирать и комбинировать. Это обеспечивает высокую степень гибкости для команды Qt, а также для пользователей во время разработки. В версии 5 команда Qt ввела дополнительную дифференциацию модулей на основной модуль (Qt Essentials) и дополнительный модуль для специальных целей использования (Qt add-ons).

Qt Essentials

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

Модуль Описание
Ядро Qt Неграфические классы ядра, которые не требуются всем остальным модулям
Qt GUI Основные классы для проектирования графических пользовательских интерфейсов; включает OpenGL
Qt Multimedia набор типов QML и классов C++ для обработки мультимедийного контента (аудио/видео); API для доступа к функциям камеры и радиоприемника
Мультимедийные виджеты Qt Классы на основе виджетов для реализации мультимедийной функциональности
Qt Network API для приложений полагаются на сети TCP/IP
Qt QML Структура и типы языка разметки Qt QML
Qt Quick Декларативный фреймворк для разработки высокодинамичных приложений с пользовательскими интерфейсами на QML
Qt Quick Controls 2 Расширение Qt quick: Легкие, очень эффективные типы QML, которые упрощают формулировку интерфейса
Qt Quick Dialogs Быстрое расширение Qt: Типы для создания и взаимодействия с системными диалогами
Qt Quick Layouts Быстрое расширение Qt: Типы QML для компоновки объектов в разрабатываемом интерфейсе
Qt Quick Test Тестовая среда для QML-приложений; тестовые случаи описываются как функции JavaScript
Qt SQL Классы для интеграции баз данных SQL
Qt Test Классы для детального тестирования приложений и библиотек Qt
Виджеты Qt Набор элементов пользовательского интерфейса для создания классических пользовательских интерфейсов на основе виджетов с помощью Qt Designer

Развертываемая модель отличается, как уже упоминалось, от приложения к приложению. Для каждого проекта важно учитывать требования, которым он должен удовлетворять. Однако в некоторых случаях имеют значение и инструменты, с которыми вы хотите работать: Модули Qt Core и Qt GUI интегрированы в стандартную поставку, если вы хотите работать с qmake. Если вы выбираете Qbs или другое решение в качестве системы сборки, такой предопределенной зависимости не существует.

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

При проектировании графических пользовательских интерфейсов Qt также предлагает две различные опции, которые влияют на выбор основного модуля: С одной стороны, Qt Designer, WYSIWYG-редактор, который тесно связан с виджетами Qt. С другой стороны, альтернативный Qt Quick (включая различные расширяющие модули), который позволяет разрабатывать на языке QML.

Дополнения Qt

С пометкой «Qt add-ons» представлены все модули, которые дают пользователям Qt дополнительное применение для конкретных целей. В то время как некоторые из этих дополнительных модулей, такие как основной модуль, предназначены для всех поддерживаемых платформ разработки и целевых платформ, большинство этих компонентов могут быть использованы только на определенных платформах. Так, например, дополнение Qt Bluetooth работает, обеспечивая доступ к оборудованию Bluetooth, только в приложениях для Android, iOS, Linux и macOS; такие модули, как Qt Windows Extras, Qt Mac Extras или Qt Android Extras, работают только в программах для соответствующих целевых платформ.

Есть также три дополнения, которые доступны только по коммерческой лицензии или по лицензии GNU-GPLv3:

  • Qt Charts: UI-компоненты для отображения оптически привлекательных диаграмм (на основе статических или динамических моделей данных).
  • Qt Визуализация данных: UI-компоненты для 3D-визуализации данных
  • Qt Виртуальная клавиатура: Фреймворк для реализации различных методов ввода, а также виртуальных клавиатур на основе QML (целевые платформы: Linux и Windows)
Примечание

После Qt 5 появились специальные дополнительные модели («модули с добавленной стоимостью»), которые доступны только при использовании коммерческой лицензии. К ним относится, например, модуль Qt for automation, который включает в себя различные библиотеки и инструменты систем автоматизации, таких как KNX (автоматизация зданий).

Qt Creator

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

Примечание

Бинарные пакеты для установки Qt Creator (включены в загрузку Qt) доступны для операционной системы Windows (от 7), Ubuntu Linux (от 16.04) и macOS (от 10.10).

В дополнение к редактору кода в Qt Creator стандартно интегрированы следующие инструменты:

  • qmake: Как стандартная система сборки Qt, qmake интегрирована непосредственно в Qt Creator и может быть выбрана в меню проекта. Однако другие системы также могут быть экспортированы в IDE. Чтобы использовать Qbs, просто откройте файл .qbs, например.
  • Qt Designer: Qt Designer — это родная программа для проектирования и создания графических пользовательских интерфейсов с помощью виджетов Qt. Визуальный редактор позволяет компоновать и адаптировать виджеты по мере необходимости.
  • Qt Linguist: Приложения могут быть локализованы по языковому принципу непосредственно в Qt Creator. Разработчики, переводчики и менеджеры релизов найдут здесь подходящий инструмент для каждого конкретного случая.
  • Qt Assistant: С помощью Qt Assistant Qt Creator предоставляет быстрый доступ к официальной документации фреймворка. Для этого существует функция справки.

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

Разработка программного обеспечения, таким образом, работает с сигналами и слотами в Qt

Благодаря связям с Python, Ruby, Go и др. Qt поддерживает различные языки. Родным языком программирования фреймворка в любом случае остается C++, а расширение этого объектно-ориентированного языка с помощью препроцессора MOC обеспечивает некоторые новые аспекты и парадигмы, такие как уже упомянутые сигналы и слоты. Эта концепция обеспечивает управляемую событиями связь между используемыми программными компонентами и представляет собой гибкую альтернативу прямым функциям обратного вызова. Это позволяет, например, связывать объекты или модули, причем они не обязательно должны знать друг о друге.

Примечание

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

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

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

Что может собственный язык разметки Qt — QML?

Начиная с версии 4.7 Qt оснащен собственным языком разметки QML, который имеет JSON-подобный синтаксис и поддерживает императивные выражения JavaScript. Однако центральное место в нем занимает декларативное описание элементов графического интерфейса пользователя, которое обеспечивает ясность программного кода. Таким образом, QML объединяет декларативный и императивный подходы в единый язык программирования, что обеспечивает большую свободу действий для разработчика. Если вы выбрали модель Qt Quick с компилятором Qt Quick Compiler, у вас есть подходящий инструмент для компиляции QML-кода на родном C++. Кроме того, вы можете использовать одноименный дизайнер (Qt Quick Designer) в Qt Creator для работы с заранее подготовленными компонентами QML.

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

QML показывает свои сильные стороны, в частности, при разработке графических интерфейсов. Благодаря более простому синтаксису и поддержке JavaScript, он предлагает дизайнерам значительно лучший доступ, чем C++. Например, пользовательские интерфейсы с поддержкой JSON могут быть созданы простым экспортом из Photoshop, что значительно ускоряет процесс разработки. Даже если теоретически возможно написать всю программу на QML, язык разметки, как правило, редко используется при программировании логики приложения.

Примечание

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

На каких платформах работает Qt?

Qt поддерживается различными 32-битными и 64-битными платформами. Для использования фреймворка обычно требуется не более чем GCC или другой компилятор, а также рендерер, такой как Open GL, DirectX для использования Qt Quick. Команда разработчиков перечисляет следующие официально поддерживаемые платформы для текущей версии Qt:

Платформа Версия Компилятор
Windows 10, 8.1, 7, UWP (универсальная платформа Windows) MSVC 2017, MSVC 2015, MinGW 5.3
Linux/X11 openSUSE 42.2, Red Hat Enterprise Linux 6.6 и 7.2, Ubuntu 16.04 GCC (с 4.8), ICC
Android с 4.1 GCC, MinGW 5.3
macOS и др. macOS (ab 10.11), iOS 10 и 11, tvOS 10 и 11, watchOS 3 и 4 Clang (Apple)
Встраиваемые системы Embedded Linux, Embedded Linux (Boot2Qt), QNX 6.6.0 и 7.0, INTEGRITY 11.4.4 GCC

Где используется Qt?

Вероятно, самым известным программным проектом, в котором используется фреймворк Qt, является KDE Plasma (ранее KDE Plasma Workspaces), ряд окружений рабочего стола или, начиная с версии 5, индивидуальное гибкое окружение от сообщества KDE с открытым исходным кодом для различных устройств (настольный компьютер, ноутбук, нетбук, планшет или смартфон). В различных версиях для настольных компьютеров она предоставляет макеты и элементы управления благодаря Qt, который идеально адаптирован к требованиям любых устройств.

Другие яркие примеры программного обеспечения на базе Qt показывают, насколько разнообразны сценарии применения этого фреймворка:

Мультимедиа:

  • Программа обработки изображений, Adobe Photoshop Elements
  • Программа управления изображениями, Adobe Photoshop Album
  • Бесплатный мультимедийный проигрыватель VLC media player
  • Linux-приложение сервиса потоковой передачи музыки Spotify.

Коммуникация:

  • Linux-версия средства коммуникации, Skype
  • Служба обмена мгновенными сообщениями, Telegram
  • Программа для проведения голосовых конференций, TeamSpeak.

Обмен файлами:

  • P2P-клиент, Marabunta
  • Менеджер загрузок KDE, KGet
  • Клиент BitTorrent для передачи данных

Инструменты 3D-графики:

  • Программа для 3D-моделирования, Adobe Muse CC
  • Программа для виртуализации 3D, Autodesk Maya
  • Программное обеспечение CAD, AutoQ3D

Игры:

  • Monkey Island
  • Dust Racing 2D

Другие:

  • Программа для верстки, Scribus
  • Математическое программное обеспечение, Mathematica
  • Программа для нотации и создания композиций, Sibelius.

Резюме: гибкий фреймворк для разнообразных, кроссплатформенных проектов

Qt — это основа основ, которая постоянно адаптируется к требованиям современных графических интерфейсов. Легко понять, почему коллекция инструментов, написанная на C++, остается одним из самых популярных решений для разработки графических пользовательских интерфейсов на базе платформы более чем через два десятилетия после ее выпуска. Это обеспечивается, в частности, такими инструментами, как Qt Creator или реализованный в новых версиях язык разметки QML, которые не только оптимизируют рабочий процесс в целом, но и сотрудничество между дизайнерами и программистами.

Оцените статью
cdelat.ru
Добавить комментарий