Вчера, спустя всего 3 месяца с момента предыдущего значительного выпуска, вышла версия 5.7 кроссплатформенного фреймворка Qt.
Qt позволяет разрабатывать приложения при помощи C++ и декларативного языка программирования QML, поддерживает все основные десктопные и мобильные платформы, а также некоторые встраиваемые и имеет открытый исходный код. Существует коммерческая версия Qt, содержащая дополнительные проприетарные модули.
Новый выпуск принес смену лицензии, открытие кода проприетарных модулей, переход на C++11, стабилизация некоторых экспериментальных модулей, а также новые экспериментальные модули и удаление устаревших.
![](https://habrastorage.org/files/657/409/ddf/657409ddfd3d43b2a571cfc94202fa33.png)
Смена лицензии
Начиная с версии 5.7, Qt больше не выпускается под LGPLv2.1. Теперь основные модули (Qt Essentials) доступны под LGPLv3 и GPLv2. Утилиты и средства разработки (в т.ч. Qt Creator) и новые модули теперь выпускаются под GPLv3. Эти изменения касаются только версии с открытым кодом и для пользователей коммерческой версии все остается как раньше.
Подробнее о смене лицензии можно почитать в этой статье.
Переход на C++11
После выпуска LTS-версии, появилась возможность прекратить поддержку устаревших компиляторов в новых версиях и начать активно использовать возможности C++11 в коде Qt. Список поддерживаемых платформ здесь.
С применением средств C++11, кодовая база была значительно почищена. QAtomic реализован при помощи std::atomic. Добавлено QTypeInfo для char16_t и char32_t.
Для использования контейнеров Qt в range for добавлена специальная функция qAsConst.
Открытие кода проприетарных модулей
Начиная с Qt 5.7, версия с открытым кодом и проприетарная идентичны. Под лицензией GPLv3 в версии с открытым кодом добавлены следующие модули:
- Qt Charts
- Qt Data Visualization
- Qt Virtual Keyboard
- Qt Quick 2D renderer
- Qt Purchasing (также доступна под LGPLv3)
![](https://habrastorage.org/getpro/habr/post_images/17c/179/191/17c179191d151a84fa7568c4ee821bb1.png)
Единственное исключение — Qt Quick Compiler, который планируется интегрировать в Qt 5.8.
В Qt Creator 4.0 добавлены следующие возможности из проприетарной версии:
- QML Profiler
- Clang static analyzer
- Qt Test Integration
Qt Quick Controls 2
Qt Quick Controls 2.0 — это новая реализация библиотеки компонентов для создания пользовательского интерфейса при помощи Qt Quick.
Доступный в виде предварительной версии в Qt 5.6 (под именем Qt Labs Controls), этот модуль теперь входит в состав Qt. Новая версия более легковесная и оптимизирована для использования на встраиваемых устройствах, построена по принципу шаблонов, позволяющих полностью изменить внешний вид компонентов и имеет, помимо стандартной темы, поддержку стилей Material и Universal.
В качестве примера приложения с интерфейсом на Qt Quick Controls 2.0, можно посмотреть мой таймтрекер с открытым исходным кодом.
Qt 3D
Доступный в качестве предварительной версии в двух предыдущих выпусках, Qt 3D включен в состав Qt. Это 3D-движок с API на C++ и QML, позволяющий встроить в приложение 3D-контент. Помимо рендеринга, доступно использование устройств ввода в трехмерном пространстве, включая такие специализированные устройства, как 3D-мыши, геймпады, джойстики и все, что работает с Qt Gamepad. Существует также тестовая версия библиотеки геометрических примитивов, материалов и прочих утилит Qt3DExtras и Qt 3D Scene Editor — концепт редактора трехмерных сцен с возможностью импорта в QML.
Qt Creator 4.0
В состав входит и новая версия интегрированной среды разработки для Qt. Помимо уже упомянутых возможностей из проприетарной версии, в Qt Creator 4.0 улучшили поддержку проектов на CMake и Qt Quick Designer, объединили режимы отладки и профилирования, добавили новую плоскую тему и новый режим профилирования QML — Flamegraph.
![](https://habrastorage.org/getpro/habr/post_images/f29/b88/f0c/f29b88f0cb7430ec68cc0b5cd406acca.png)
Qt for Device Creation
В Qt for Device Creation добавлен функционал OTA-обновлений, возможность использования Windows для разработки и поддержка QNX. Windows Embedded больше не поддерживается. Проведена работа по приведению Qt for Device Creation к совместимости с Yocto Project.
Подробнее про изменения Qt for Device Creation можно прочитать в блоге.
Новые модули
Добавлена предварительная версия модуля Qt Wayland Compositor, позволяющего реализовать собственный композитор Wayland. Модуль нацелен на использование во встраиваемых устройствах, которым требуется поддержка нескольких одновременно работающих приложений. API модуля на C++ и QML, также есть API для создания расширений Wayland на C++ и QML.
Также в состав Qt 5.7 включена предварительная версия модуля Qt SCXML, который позволяет использовать конечные автоматы SCXML.
В Qt 5.7 входит предварительная версия Qt Gamepad, позволяющего работать с геймпадом из C++ и QML. Поддерживаются Windows, Linux, Android и iOS.
Изменения в существующих модулях
В Qt Core теперь используется poll() вместо select(), что позволяет обрабатывать более 1024 открытых файловых дескрипторов. Добавлена поддержка нескольких каналов в QIODevice.
Qt QML получил поддержку JIT на WinRT и 64-битных ARM, возможность отладки нескольких QJSEngine одновременно, улучшения в отладчике и профилировщике.
В Qt GUI задействованы оптимизации NEON для масштабирования изображений, оптимизированы обертки для функций OpenGL и ускорена работа с иконками из тем при помощи кэша GTK+.
Движок Chromium в Qt WebEngine обновлен до версии 49 и получил поддержку печати в PDF, drag'n'Drop и проигрывания защищенного DRM HTML5-видео, при помощи плагина Widevine.
В Qt Multimedia улучшено QML API Playlist, а также добавлена поддержка tvOS.
Добавлена тестовая поддержка периферийной роли BLE для Qt Bluetooth (только при использовании Bluez в качестве бекенда).
- В Qt Sensors добавлен iio-sensor-proxy бекенд для Linux.
Удаленные и устаревшие модули
Модули Qt Quick 1 и Qt Enginio удалены из поставки.
Поддержка платформ
- Минимальные версии мобильных платформ увеличены до iOS 7 и Android 4.1.
- В Qt for Device Creation Добавлена поддержка следующих устройств:
- Платы NVIDIA DRIVE CX (Tegra X1, 64 bit ARM)
- The Rasberry Pi 3 (32-битный рехим)
- Устройства, основанные на i.MX7 (с использованием фреймбуфера и Qt Quick 2D renderer)