Релиз фреймворка Qt 6.0

Компания Qt Company опубликовала релиз ветки Qt 6, которая включает значительные архитектурные изменения. Для сборки Qt 6 по умолчанию задействован Cmake, а в коде разрешено использование стандарта C++17. Лицензионная политика и модель распространения фреймворка остались прежними, опасения, связанные с усилением коммерциализации проекта, не подтвердились. В новой версии заявлена поддержка платформ Windows 10, macOS 10.14+, Linux (Ubuntu 20.04+, CentOS 8.1+, OpenSuSE 15.1+), iOS 13+ и Android (API 23+). Достижение паритета с Qt 5 в поддержке real-time систем ожидается в выпуске Qt 6.2. Следующий значительный выпуск Qt 6.1 ожидается в апреле, а Qt 6.2 LTS в сентябре 2021 года.

Ключевые особенности Qt 6:

  • Предложен абстрагированный графический API, не зависящий от 3D API операционной системы. Ключевым компонентом нового графического стека Qt является движок рендеринга сцен, использующий прослойку RHI (Rendering Hardware Interface) для обеспечения работы приложений Qt Quick не только с OpenGL, но и поверх API Vulkan, Metal и Direct 3D. Специфичные для OpenGL классы перемещены из QtGui в отдельный модуль QtOpenGL. Также добавлен новый модуль QtShaderTools для работы с различными языками для создания шейдеров.
  • Подготовлен модуль Qt Quick 3D с API для создания интерфейсов пользователя на базе Qt Quick, сочетающих элементы 2D и 3D графики. Qt Quick 3D позволяет использовать QML для определения 3D-элементов интерфейсов без задействования формата UIP. В Qt Quick 3D для 2D и 3D можно использовать один runtime (Qt Quick), один макет сцены и один анимационный фреймворк, а для визуальной разработки интерфейса применять Qt Design Studio. Модуль решает такие проблемы, как большие накладные расходы при интеграции QML с контентом из Qt 3D или 3D Studio, и предоставляет возможность синхронизации анимации и преобразований на уровне отдельных кадров между 2D и 3D.
  • Проведена реструктуризация кодовой базы с разбиением на более мелкие составные части и сокращением размера базового продукта. Инструменты для разработчиков и специализированные компоненты теперь поставляться в виде дополнений, распространяемых через каталог-магазин Qt Marketplace. Для загрузки и установки дополнений предложен собственный пакетный менеджер на базе проекта Сonan. Дробление на пакеты позволяет публиковать выпуски модулей в соответствии с отдельным графиком разработки, а также выпускать модули сразу для нескольких версий базового набора Qt.

    Не все предлагаемые в ветки Qt 5 модули перенесены в Qt 6. Процесс адаптации модулей будет постепенным и продлится до формирования LTS-выпуска Qt 6.2 осенью следующего года. В базовый состав Qt 6.0 включены модули:

    • Qt Concurrent
    • Qt Core
    • Qt Core Compatability APIs
    • Qt D-Bus
    • Qt GUI
    • Qt Help
    • Qt Network
    • Qt OpenGL
    • Qt Print Support
    • Qt QML
    • Qt Quick
    • Qt Quick 3D
    • Qt Quick Controls
    • Qt Quick Layouts
    • Qt Quick Timeline
    • Qt Quick Widgets
    • Qt Shader Tools
    • Qt SQL
    • Qt SVG
    • Qt Test
    • Qt UI Tools
    • Qt Wayland
    • Qt Wayland Compositor
    • Qt Widgets
    • Qt XML

    В отдельные пакеты вынесены модули:

    • Qt 3D
    • Qt Image Formats
    • Qt Network Authorization
    • Qt CoAP
    • Qt MQTT
    • Qt OpcUA

    В Qt 6.1 число пакетов будет расширено модулями:

    • Active Qt
    • Qt Charts
    • Qt Quick Dialogs (File dialog)
    • Qt ScXML
    • Qt Virtual Keyboard

    В Qt 6.2 будут предложены дополнительные модули:

    • Qt Bluetooth
    • Qt Data Visualization
    • Qt Lottie Animation
    • Qt Multimedia
    • Qt NFC
    • Qt Positioning
    • Qt Quick Dialogs: Folder, Message Box
    • Qt Remote Objects
    • Qt Sensors
    • Qt SerialBus
    • Qt SerialPort
    • Qt WebChannel
    • Qt WebEngine
    • Qt WebSockets
    • Qt WebView
  • Существенно модернизирован QML:
    • Поддержка строгой типизации.
    • Возможность компиляции QML в представление на C++ и машинный код.
    • Перевод полной поддержки JavaScript в разряд опций (использование полнофункционального JavaScript-движка требует больших ресурсов, что мешает применению QML на таком оборудовании, как микроконтроллеры).
    • Отказ от версионирования в QML.
    • Унификация структур данных, дублирующихся в QObject и QML (позволит сократить потребление памяти и ускорить запуск).
    • Уход от генерации структур данных во время выполнения в пользу генерации во время компиляции.
    • Скрытие внутренних компонентов через использование приватных методов и свойств.
    • Улучшенная интеграция с инструментами разработки для рефакторинга и диагностики ошибок во время компиляции.
  • Добавлены инструменты для обработки связанных с графикой ресурсов на этапе компиляции, например, для преобразования PNG-изображений в сжатые текстуры или для конвертации шейдеров и мешей в оптимизированные бинарные форматы для конкретного оборудования.
  • Встроен унифицированный движок для тем оформления и стилей, позволяющий добиться внешнего вида приложений на базе Qt Widgets и Qt Quick, родного для разных мобильных и настольных платформ. В Qt Quick 6 добавлена поддержка родных стилей macOS и Windows (поддержка родных стилей Material и Fusion для Android и Linux была реализована ещё в Qt5). Реализация родного стиля для iOS ожидается в следующем значительном выпуске Qt.
  • Функциональность поддержки платформ, ранее предоставляемая модулями QtX11Extras, QtWinExtras и QtMacExtras, перенесена в специфичные платформозависимые API, доступные напрямую из Qt.
  • В качестве системы сборки использован инструментарий CMake вместо QMake. Поддержка сборки приложений при помощи QMake сохранена, но сам Qt теперь собирается с использованием CMake. CMake выбран, так как данный инструментарий получил широкое распространение в среде разработчиков проектов на C++ и поддерживается во многих интегрированных средах разработки. Разработка сборочной системы Qbs, которая претендовала на роль замены QMake, продолжена сообществом.
  • Осуществлён переход при разработке на стандарт C++17 (ранее использовался C++98, а с Qt 5.7 — C++11).
  • Добавлена возможность использования в коде на C++ некоторой функциональности, предлагаемой для QML и Qt Quick. В том числе предложена новая система свойств для QObject и подобных классов. Из QML в ядро Qt интегрирован движок для работы с привязками (binding), что позволяет снизить нагрузку и потребление памяти для биндингов и сделать их доступными для всех частей Qt, а не только для Qt Quick.
  • Расширена поддержка дополнительных языков, таких как Python и WebAssembly.
  • Значительно модернизирована обработка строк и Unicode.
  • Объединены классы QList и QVector. В итоговом сводном классе использована модель контейенров QVector, напоминающая массивы.
  • Почти полностью переписаны реализации классов QMetaType и QVariant, лежащие в основе системы мета-типов Qt, на лету предоставляющей информацию о типах.

Источник: http://www.opennet.ru/opennews/art.shtml?num=54218