Qt 5.9 — это первый релиз после 5.6 с длительным сроком поддержки. Новая версия Qt, по словам разработчиков, одна из самых значимых за всё время и содержит большое количество как новых функций, так и улучшений производительности и стабильности.
Исправлено свыше 2000 ошибок, кодовая база полностью переведена на C++11, переписана система конфигурации на основе Qt Lite, реализована новая графическая подсистема, улучшен модуль в Qt Quick Controls, добавлен IPC-интерфейс для управления Qt-объектами в других процессах, проделана огромная работа в Qt 3D.
Разработчики объявляют о 3-летнем сроке поддержки для Qt 5.9 и рекомендуют начинать новые проекты, для которых важна стабильность и частота выхода обновлений, именно на этой версии.
Qt Lite — это новая система конфигурации Qt на этапе сборки, анонсированная в Qt 5.8. Она позволяет уменьшить размер дистрибутива программы, что особенно критично для встраиваемых систем. Qt Lite предоставляет дерево зависимостей из сотен опций конфигурации для разных модулей, которые можно отключать при отсутствии необходимости в целевой программе. В качестве примера приводится размер стандартной игры Samegame, идущей в комплекте с исходным кодом:
- Qt 5.6 Dynamic: 24.5 МиБ;
- Qt 5.6 Static: 13.8 МиБ;
- Qt 5.9 Lite Static: 5.4 МиБ.
Существенные улучшения производительности коснулись QML:
- В качестве альтернативы проприетарному компилятору из QML в C++ представлен QML-кеш, который позволяет транслировать скрипт QML в байт-код на лету, сохраняя его в файлы .qmlc, загружающиеся автоматически при следующем старте программы. Кеш также можно сформировать на этапе сборки или вообще от него отказаться. В некоторых случаях тесты показывают более чем двукратный прирост скорости загрузки приложения по сравнению с обычным текстовым парсером.
- Добавлен облегчённый набор Quick Controls 2, дающий коллосальный прирост производительности по сравнению с набором Quick Controls 1, который был переусложнён гибкой поддержкой смены стилей на лету, на практике редко использующейся.
- По схожему принципу с сохранением скомпилированного шейдера на диск для ускорения последующего старта реализовано кеширование шейдеров. Для этого используется расширение
GL_ARB_get_program_binary
. По результатам тестов, прирост скорости загрузки при повторном запуске составляет до 700 %.
Qt Core
- Добавлен тип
qfloat16
. - Добавлен класс
QOperatingSystemVersion
для проверки версии ОС. -
QRegularExpression
теперь зависит от библиотеки PCRE2. -
QProcessEnvironment
теперь также работает в iOS, tvOS, watchOS и VxWorks.
Qt GUI
- GL-бекенд
QPainter
теперь работает с core-профилями OpenGL. - Добавлен метод
QImage::reinterpretAsFormat
, позволяющий интерпретировать данные изображения в другом формате без копирования. - Compute-шейдеры теперь поддерживаются в
QOpenGLShader
иQOpenGLShaderProgram
, а также в OpenGL ES 3.1+. - При использовании FreeType теперь используются затемнение (stem-darkening) и гамма-коррекция для шрифтов OpenType.
Qt QML
- Добавлена генерация ahead-of-time кеша QML.
- Переписан сборщик мусора для большей производительности и меньшего потребления памяти при работе с JavaScript.
Qt Quick
- Шейдеры OpenGL теперь сохраняются на диск для ускорения повторного старта.
- Добавлен бекенд OpenVG.
- Ассоциацию между окном и экраном теперь можно задать прямо из QML с помощью
Window.screen
иQt.application.screens
. - Добавлена возможность узнать шрифт, который в действительности используется при рисовании элемента
Text
. - Добавлена возможность использовать общую память для изображений между процессами с помощью image provider.
Qt Quick Controls 2
- Добавлены элементы
DelayButton
иScrollView
. - Добавлена поддержка multi-touch для кнопок и слайдеров.
-
ComboBox
теперь можно редактировать. - Drawer теперь может быть неинтерактивным.
- Значения
Slider
,RangeSlider
иDial
теперь обновляются на лету по умолчанию (устранена регрессия после Quick Controls 1). -
Slider
,Dial
иScrollBar
теперь реагируют на нажатия мыши без задержки. - Добавлены сигналы для пользовательского взаимодействия:
AbstractButton::toggled()
,Slider::moved()
,SpinBox::valueModified()
и т. п. - Добавлена пошаговая прокрутка в
ScrollBar
. -
SwipeDelegate
теперь позволяет выключать и отключать жесты. - Добавлена возможность вертикального отображения
SwipeView
.
Qt WebEngine
- Бекенд обновлён до Chromium 56.
- Теперь используется система сборки GN из Chromium.
- Добавлен API для загрузки HTTP POST.
- В
QQuickWebEngineProfiles
реализована возможность исполнения пользовательских скриптов, теперь можно получить доступ кQQuickWebEngineUserScripts
из C++. - В
DownloadItems
теперь есть причина в случае ошибки или прерывания загрузки.
Qt SerialBus
- В
QCanBusFrame
добавлены флаги CAN FD Bitrate Switch (BRS) и Error State Indicator (ESI). - Добавлен класс
QCanBusDeviceInfo
для получения информации о доступных CAN-интерфейсах. - На Windows добавлен плагин для поддержки SYS-TEC electronic CAN-адаптеров.
Qt Location
- Добавлена поддержка наклона и поворота карт с возможностью жестов multi-touch, задания угла обзора камеры.
- Улучшено складирование элементов на карте.
- Улучшена работа с копирайтами элементов.
- Добавлена поддержка рисования карты не только с помощью тайлов, но и самим плагином.
- Добавлен плагин
MapboxGL
на основе движкаmapbox-gl-native
. - Добавлен режим масштабировая карты
fitViewportToVisibleMapItems
. - Добавлен элемент
MapItemGroup
для группировки объектов на карте в отдельном QML-файле. - Добавлен элемент
MapParameter
для передачи параметров в плагин. - Оптимизировано рисование с помощью тайлов низкого разрешения, пока загружается более детализированный тайл.
- Приложения на iOS теперь могут использовать
QtPositioning
в фоне. - Добавлен geoservice-плагин
itemsoverlay
с пустой картой, позволяющий только показывать элементы.
Qt Multimedia
- Добавлены следующие параметры в QML:
CameraCapture.supportedResolutions
,CameraFlash.supportedModes
,MediaPlayer.notifyInterval
(также для Audio и Video),Video.loops
.
Qt Network
- В
QNetworkAccessManager
добавлена поддержка HSTS (HTTP Strict Transport Security). - Также в
QNetworkAccessManager
добавлены политики перенаправления (ManulRedirectsPolicy
,NoLessSafeRedirectsPolicy
,SameOriginRedirectsPolicy
,UserVerifiedRedirectsPolicy
).
Qt NFC
- Теперь можно использовать NFC в сервисах на Android.
- Добавлено взаимодействие с картами ISO-DEP, NFC-A, NFC-B, NFC-F и NFC-V.
Qt WebSockets
- Добавлена возможность использовать внешний
QTcpSocket
.
Qt Charts
- Добавлена мелкая сетка для логарифмических координат.
- Добавлена поддержка различных фигур в обозначениях.
- Добавлена поддержа более одного столбика в графике.
Qt 3D
- Приложения на Qt Quick 2 теперь можно рендерить во внеэкранный буфер и использовать в 3D-сценах в виде текстуры.
- Представлен прототип подсистемы анимации с вожностями неблокирующей покадровой отрисовки в отдельном потоке и импортированием из Blender.
- Добавлен материал Physics Based Rendering (PBR) в модуле
Qt3DExtras
. - Добавлена поддержка 3D-текста в
Qt3DExtras
. - Компонент Level of Detail теперь позволяет переключать детализацию объектов сцены в зависимости от проекции и дальности камеры.
- Компонент Mesh теперь основан на плагинах с поддержкой следующих форматов из коробки: Wavefront OBJ, PLY и FBX.
- Текстурированный 2D-текст теперь основан на технологии Distance field, позволяющей избавиться от «лесенки» при большом приближении.
Qt Virtual Keyboard
- Добавлена поддержка обработчиков переключения между физическими клавиатурами.
- Теперь Сaps Lock активируется только при двойном нажатии на клавишу Shift.
- Добавлена поддержка внешних раскладок клавиатуры, дополняющих встроеные раскладки.
- Добавлено выпадающее окно для быстрого выбора языка ввода.
- Добавлено автоматическое дополнение набираемого слова, если найден только один вариант в подсказках.
- Список слов-кандидатов теперь автоматически скрывается, если неактивен.
- Добавлен полноэкранный режим запуска.
Встраиваемые платформы
- Добавлена экспериментальная поддержка DRM Dumb-Buffer в linuxfb, необходимая для устройств, не поддерживающих устаревшую модель fbdev (или имеющих проблемы с её эмуляцией).
- Плагин
evdevtouch
теперm поддерживает фильтрацию и предсказание событий сенсорных экранов.
Qt Bluetooth
- Добавлена поддержка классического Bluetooth в WinRT.
- Добавлена поддержка Android Peripheral.