Вышел Qt 5.9 LTS

good-penguin.png

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)

©  Linux.org.ru