Компания Qt Company опубликовала первый тестовый выпуск новой ветки Qt 6, в которой будут предложены значительные архитектурные изменения, а для сборки потребуется компилятор, поддерживающий стандарт C++17. Выпуск включает в себя только начальный каркас будущего релиза Qt 6, который намечен на 1 декабря 2020 года. Функциональность в ветке Qt 6 будет расширяться до объявления заморозки кодовой базы 31 августа.

В состав первой тестовой сборки включены модули:
Qt Core,
Qt GUI,
Qt Widgets,
Qt Network,
Qt QML,
Qt Quick,
Qt Quick Controls,
Qt SVG,
Qt Network Authorization,
Qt SQL и
Qt Test.

Ключевые особенности 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.
  • Существенная модернизация 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 6 планируют реализовать поддержку многих современных возможностей C++, но без потери обратной совместимости с кодом на основе прошлых стандартов.
  • Возможность использования в коде на C++ некоторой функциональности, предлагаемой для QML и Qt Quick. В том числе будет представлена новая система свойств для QObject и подобных классов. Из QML в ядро Qt будет интегрирован движок для работы с привязками (binding), что позволит снизить нагрузку и потребление памяти для биндингов и сделать их доступными для всех частей Qt, а не только для Qt Quick.
  • Расширение поддержки дополнительных языков, таких как Python и WebAssembly.