Релиз фреймворка 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:
- Предложен абстрагированный графический API, не зависящий от 3D API операционной системы. Ключевым компонентом нового графического стека Qt является движок рендеринга сцен, использующий прослойку RHI (Rendering Hardware Interface) для обеспечения работы приложений Qt Quick не только с OpenGL, но и поверх API Vulkan, Metal и Direct 3D.
- Подготовлен модуль 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 Network Authorization, Qt Image Formats и Qt 3D.
- Существенно модернизирован QML:
- Поддержка строгой типизации.
- Возможность компиляции QML в представление на C++ и машинный код.
- Перевод полной поддержки JavaScript в разряд опций (использование полнофункционального JavaScript-движка требует больших ресурсов, что мешает применению QML на таком оборудовании, как микроконтроллеры).
- Отказ от версионирования в QML.
- Унификация структур данных, дублирующихся в QObject и QML (позволит сократить потребление памяти и ускорить запуск).
- Уход от генерации структур данных во время выполнения в пользу генерации во время компиляции.
- Скрытие внутренних компонентов через использование приватных методов и свойств.
- Улучшенная интеграция с инструментами разработки для рефакторинга и диагностики ошибок во время компиляции.
- Добавлены инструменты для обработки связанных с графикой ресурсов на этапе компиляции, например, для преобразования PNG-изображений в сжатые текстуры или для конвертации шейдеров и мешей в оптимизированные бинарные форматы для конкретного оборудования.
- Встроен унифицированный движок для тем оформления и стилей, позволяющий добиться внешнего вида приложений на базе Qt Widgets и Qt Quick, родного для разных мобильных и настольных платформ.
- В качестве системы сборки использован инструментарий 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.
Источник: http://www.opennet.ru/opennews/art.shtml? num=54218
© OpenNet