Qt 6 что нового
Перейти к содержимому

Qt 6 что нового

Вышла версия 6.0 фреймворка Qt

Во вторник, 8 декабря, компания Qt Company обновила свой фреймворк для кроссплатформенной разработки. Если сравнить с пятой версией 2012 года, в Qt 6.0 появились новые API для 3D-графики, улучшенная поддержка С++17 и система сборки cmake. Полный список изменений компания публикует на странице в вики.

Технический директор Qt Company Ларс Кнолл отметил, что версия Qt 5 «была фантастически успешна многие годы». Предыдущую версию выпустили в 2012 году и её пользовательская база выросла до 1,5 миллионов пользователей. Также увеличилось использование Qt во встраиваемых системах управления, контроля и мониторинга микропроцессоров; появился запрос на работу с API для 3D-графики.

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

Особенности Qt 6.0:

  • Использование С++ 17
  • QML следующего поколения
  • Новая графическая архитектура
  • Отрисовка 2D и 3D объединена для Qt Quick
  • Система сборки CMake для приложений
  • Qt для микроконтроллеров, требующий 80 КБ ОЗУ в минимальной конфигурации

Ларс Кнолл отметил работу более 250 сотрудников и тысяч пользователей, участвовавших в разработке новой версии продукта и поблагодарил их за тяжёлый труд. Он надеется, что пользователи оценят Qt 6, и обещает портировать оставшиеся модули, как можно быстрее.

Qt 6.0 вышла на Windows, macOS, Linux, iOS и Android. Программа пока не работает для операционных систем реального времени QNX и INTEGRITY. Их поддержка появится к моменту выхода Qt 6.2.

Техническое видение Qt 6

Qt 6 станет продолжением нашей работы над Qt 5, а потому не должен принести вреда пользователям. Но новая мажорная версия даст нам больше свободы для реализации новых идей, функциональности и будет лучше адаптирована для современного, быстро меняющегося мира, чем Qt 5. Qt 6 будет стремиться к максимальной совместимости с Qt 5. Разработка Qt 5 продолжается и нацелена на реализацию некоторых функций Qt 6 в несколько урезанном виде к Qt 5.14 и Qt 5.15 LTS. С заморозкой функциональных свойств Qt 5.14, внимание сместится к исследованиям и разработкам в Qt 6; мы стремимся подготовить релиз Qt 6.0 к концу 2020 года. Прежде чем углубляться в нововведения, стоит вспомнить основные принципы Qt, чтобы решить, что останется неизменным.

Что делает Qt ценным?

Qt — это горизонтальный продукт, который используется во многих отраслях IT. Основные ценности Qt для наших клиентов и пользователей:

  • Кроссплатформенность, позволяющая разработчикам разворачивать свои продукты на всех настольных, мобильных и встраиваемых системах из одной кодовой базы.
  • Масштабируемость от простых одноцелевых устройств до первоклассных комплексных настольных приложений или подключенных систем.
  • Лидирующие API, инструменты и документация, упрощающие создание приложений и устройств.
  • Поддерживаемость, стабильность и совместимость, позволяющие развивать большие кодовые базы с минимальными усилиями.
  • Большое сообщество разработчиков, насчитывающее более миллиона пользователей.

Новая версия Qt должна быть адаптирована к новым требованиям рынка, сохраняя всё вышеперечисленное.

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

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

В то же время, пользовательские интерфейсы на профессиональных устройствах продолжают развиваться и усложняться. Объединение 2D и 3D в одном приложении будет обыденностью, равно как дополненная или виртуальная реальность.

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

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

Qt 6 будет новой мажорной версией Qt, основной целью которой является подготовить Qt к требованиям 2020 и последующих лет, очистить и упростить кодовую базу и облегчить её сопровождение. В связи с этим, основное внимание будет уделяться элементам, которые требуют глобальных архитектурных изменений и не могут быть выполнены без частичной потери совместимости с Qt 5.

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

QML следующего поколения

QML и Qt Quick были основными направлениями разработки в предыдущие годы. Интуитивно понятные способы создания графических интерфейсов — одно из значительных преимуществ Qt.

Но QML, каким он был создан в Qt 5, имеет некоторые причуды и ограничения. Это, в свою очередь, означает, что есть потенциал для значительных улучшений, которые планируются в Qt 6. Главные из запланированных изменений:

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

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

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

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

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

Поддержка компиляции QML в эффективный C++ и нативный код. Со строгой типизацией и упрощенными правилами поиска в QML возможно генерировать эффективный C++ или нативный код, значительно увеличивая производительность во время выполнения.

Поддержка областей видимости. Приватные методы и свойства востребованы уже давно и позволят скрывать данные и функционал в компонентах QML.

Улучшенная интеграция с инструментарием. Текущая модель кода QML часто неполноценна, что делает рефакторинг и обнаружение ошибок во время компиляции трудными или невозможными. Благодаря вышеуказанным изменениям, появится возможность предложить качественную диагностику во время компиляции, которая сможет конкурировать с C++, а также значительно улучшит поддержку рефакторинга.

Графика следующего поколения

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

В Qt 5 мы использовали OpenGL в качестве единого API для 3D-графики. С тех пор многие API были определены. Vulkan — назначенный преемник OpenGL в Linux, Apple продвигает Metal, а Microsoft поставляет Direct 3D. Это означает, что в будущем Qt придётся беспрепятственно работать со всеми этими технологиями. Чтобы сделать это возможным, необходимо определить новый уровень абстракции для графических API (по аналогии с QPA для интеграции с платформами), называемый Rendering Hardware Interface (RHI). Необходимо перебазировать всю инфраструктуру рендеринга (QPainter, Qt Quick Scenegraph и поддержку 3D) для работы поверх этого слоя.

Набор различных графических API также приведёт к тому, что будет необходима поддержка разных языков шейдеров. Модуль Qt Shader Tools поможет кросс-компилировать шейдеры как на этапе компиляции, так и во время выполнения.

3D играет все более важную роль, и на текущий момент нет унифицированного решения для создания интерфейсов, содержащих как 2D, так и из 3D элементы. Интеграция QML с Qt 3D и 3D Studio в настоящее время обременительна и обладает невысокой производительностью. Кроме того, невозможно синхронизировать анимацию и переходы покадрово между 2D- и 3D-контентом.

Интеграция 3D-контента с Qt Quick направлена на решение этой проблемы. В этом случае, новый движок позволит рендерить 2D- и 3D-содержимое одновременно и поддерживать произвольные переходы между ними. Это превратит QML в язык для определения пользовательских интерфейсов в 3D и устранит необходимость в формате UIP. Предварительная версия нового Qt Quick с поддержкой 3D будет представлена уже с Qt 5.14, подробная информация будет опубликована в отдельной статье.

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

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

Объединение инструментария

Инструменты Qt, предназначенные для построения графического интерфейса, разделены на Qt Design Studio и Qt 3D Studio. Кроме того, Qt 3D Studio отделена от остального инструментария Qt, что приводит к дублированию усилий.

Планируется унификация функционала Qt Design Studio и Qt 3D Studio за счёт поглощения функционала последней. Design Studio и Qt Creator делят большое количество кода, и это позволит устранить разрыв между разработчиками и дизайнерами.

Инструменты для работы над дизайном также нуждаются в хорошей интеграции с инструментами создания контента, такими как Photoshop, Sketch, Illustrator, Maya, 3D Max и другими.

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

QMake, как система сборки, используемая в Qt 5, имеет множество ограничений. В Qt 6 в качестве системы сборки по умолчанию планируется использовать CMake, в том числе для сборки самого Qt. На сегодняшний день, CMake — наиболее распространённая система сборки для проектов на C++, и улучшенная интеграция с ней крайне необходима. Поддержка QMake продолжится, но развитие и использование её для разработки самого Qt будет прекращено.

Улучшение C++ API

За последние несколько лет C++ сильно изменился. Мы были вынуждены основывать Qt 5 на C++98, но для Qt 6 мы можем положиться на C++17. Это означает гораздо больше функциональных возможностей, предусмотренных в самом языке, которые были недоступны при проектировании Qt 5. Нашей целью при работе над Qt 6 будет лучшая интеграция со встроенным в язык функционалом, без потери обратной совместимости.

В Qt 6 планируется сделать некоторые возможности, представленные в QML и Qt Quick, доступными из C++. Ведётся работа над новой системой свойств для QObject и связанных классов, интеграцией механизма привязок из QML в ядро Qt и предоставление доступа к нему из C++. Данное решение позволит существенно сократить задержки во время исполнения и потребление привязками памяти.

Поддержка языков программирования

В Qt 5.12 была представлена поддержка Python, а также, за счёт WebAssembly, появилась новая платформа — браузер. Поддержание и расширение кроссплатформенности будет важным для шестой серии Qt после выхода 6.0.

Совместимость с Qt 5 и постепенные улучшения

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

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

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

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

В любом случае, нам нужно двигаться вперёд, и без уборки не обойтись. Будет удалена бо́льшая часть функциональности, помеченной устаревшей в Qt 5. Это высвободит время наших разработчиков и позволит сфокусироваться на развитии и сопровождении актуального кода.

Однако, отказ от этих устаревших частей должен быть максимально простым. В идеале, пользователи смогут портировать код постепенно, используя Qt 5.15 LTS и поддерживая возможность компиляции кодовой базы с обеими версиями одновременно.

Торговая площадка и структура продукта

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

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

Обратная связь и участие

Это не итоговый вариант, и техническое видение будет развиваться вплоть до самого выхода Qt 6. Хотя я уверен, что тут описаны наиболее важные моменты, безусловно, это не всё. Если у Вас есть какие-либо замечания или предложения, пожалуйста, примите участие в разработке и обсуждении Qt 6, как этого позволяет открытая модель разработки.

All new Qt 6

Software requirements are increasing exponentially, your team’s capacity is not! Qt 6’s tools & APIs empower designers and developers to create more!

Next-Generation User Experience

Build consistently branded 2D & 3D applications with a custom or native look & feel – using designer and developer-friendly tools, a leaner, yet more powerful QML language, and a flexible graphics architecture.

Limitless Scalability

From microcontrollers (MCUs) to supercomputers, Qt 6 and our massive ecosystem provides everything you need to design, develop, and deploy software for your entire product line. Create applications that are beautiful in the front-end and powerful in the back-end, with the same codebase for any hardware, any OS, or on bare metal.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *