Вышел Qt 5.9 LTS
Qt 5.9 это первый релиз после 5.6 с длительным сроком поддержки. Новая версия Qt, по словам разработчиков, одна из самых значимых за всё время и содержит большое количество как нового функционала, так и улучшений в производительности и стабильности.
Вцелом исправлено свыше 2000 ошибок, кодовая база полностью переведена на C++11, переписана система конфигурации на основе Qt Lite, реализована новая графическая подсистема, дополнен модуль контролов в Qt Quick, добавлен 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. Результаты тестов показывают до семикратного прироста скорости загрузки при повторном запуске.
Qt Core
- Добавлен тип qfloat16
- Добавлен класс QOperatingSystemVersion для проверки версии ОС в рантаймe
- 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
- Поддержка мультитача для кнопок и слайдеров
- 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
- Добавлена поддержка для наклона и повороты карт с возможностью жестов мультитача, задания угла обзора камеры
- Улучшено складирование элементов на карте
- Улучшена работа с копирайтами элементов
- Добавлена поддержка рисования карты не только с помощью тайлов, но и самим плагином
- Новый плагин «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
- Поддержка обработчиков переключения между физическими клавиатурами
- Теперь caps lock активируется только при двойном нажатии на клавишу shift
- Поддержка внешних раскладок клавиатуры, дополняющих встроеные раскладки
- Добавлено выпадающее окно для быстрого выбора языка ввода
- Добавлена автоматическое дополнение набираемого слова, если найден только один вариант в подсказках
- Список слов-кандидатов теперь автоматически скрыт, если неактивен
- Добавлен полноэкранный режим запуска
Встроенные платформы
- Экспериментальная поддержка DRM Dumb-Buffer в linuxfb, необходимая для устройств неподдерживающих устаревшую модель fbdev (или имеющих проблемы с её эмуляцией)
- Плагин evdevtouch поддерживает фильтрацию и предсказание событий сенсорных экранов
Qt Bluetooth
- Поддержка классического Bluetooth в WinRT
- Поддержка Android Peripheral
>>> Анонс CTO Qt Company Ларса Нолла (Lars Knoll)