Вчера, спустя всего 3 месяца с момента предыдущего значительного выпуска, вышла версия 5.7 кроссплатформенного фреймворка Qt.
Qt позволяет разрабатывать приложения при помощи C++ и декларативного языка программирования QML, поддерживает все основные десктопные и мобильные платформы, а также некоторые встраиваемые и имеет открытый исходный код. Существует коммерческая версия Qt, содержащая дополнительные проприетарные модули.
Новый выпуск принес смену лицензии, открытие кода проприетарных модулей, переход на C++11, стабилизация некоторых экспериментальных модулей, а также новые экспериментальные модули и удаление устаревших.
Смена лицензии
Начиная с версии 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)
Единственное исключение — 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.
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)
Дополнительная информация
Комментарии (44)
AndrewIg
17.06.2016 10:30-14Сори за оффтоп.
К сожалению Qt — не самы распространенный фреймворк и программистов под него не так много как хотелось бы.
А мы очень ищем именно C++/Qt
Профиль вакансии тут: https://hh.ru/vacancy/17225983
Приходите!JonNiBravo
17.06.2016 11:28Тут еще важно сказать, что писать гуй на Qt Widgets и Qt Quick controls, как говорится, две большие разницы. Для последнего можно плюсы вообще не знать и писать все на javascript. Рекомендую в вакансии расписать стек технологий и указать версию Qt 4\5
PixRaider
17.06.2016 13:50+2> разработка агента для сбора дополнительных данных об активности сотрудников.
Какой у вас милый проект, да и как нагло хантите в оффтопе.
Где-то в аду есть специальное местечко для подобного, я уверен.
dimas
22.06.2016 15:26Непонятно, зачем вам обязательно готовые разработчики Qt. Там нет особого рокет сайнса и все это достаточно шустро осваивается.
Искать же готового, учитывая не самую интересную тематику вашего продукта, и не самый вкусный ценник, действительно можно долго…
BlackRaven86
17.06.2016 11:40+1Для последнего можно плюсы вообще не знать и писать все на javascript.
Очень спорное утверждение :)
UPD: Промазал с ответом :/JonNiBravo
17.06.2016 15:13Вот например клиент к Яндекс Диску на Js и QML без использования C++ https://habrahabr.ru/post/230435/ код проекта http://bazaar.launchpad.net/~mrqtros/yad/trunk/files
BlackRaven86
17.06.2016 15:24+1Да, можно пытаться все писать на QML и был такой тренд. Но я бы сказал, что он уже прошел :) В каких-то случаях может это и оправдано, но в целом, не стоит пытаться любой ценой избежать кода на плюсах и тащить все в QML.
IGHOR
17.06.2016 12:05А никто и не знал что в всех версиях Qt до 5.7.0 было ограничение (баг) количества тредов и сокетов 1000 на процесс.
Как только количество сокетов или тредов доходило до 1000 то сразу вылет программы.
Только в Qt 5.7.0 сняли ограничения и теперь можно строить действительно масштабированные сервисы.
А еще в Qt 5.7.0 присутствует баг в плагине MySQL, next() с TINYINT UNSIGNED после вызова addBindValue() не читает значения больше 127.
govage
17.06.2016 12:23«Модули Qt Script и Qt Enginio удалены из поставки.»
Откуда информация про QtScript? Похоже, что она не верная.BlackRaven86
17.06.2016 15:20Да, исправил. Удален был Qt Quick 1, а Qt Script пока еще остается как deprecated.
ittakir
17.06.2016 12:23Всем хорош Qt, но процесс деплоя приложения продолжает угнетать.
Начнем с того, что линковка фактически только динамическая. Да, я знаю, что можно собрать самому Qt статически. Но я отдаю приложение неопытному заказчику, который не осилит это, поэтому остается вариант только стандартной поставки.
Далее, нигде нет списка необходимых dll, чтобы приложение заработало. Нужно иметь отдельную чистую виртуалку, и там пытаться запускать приложение, постепенно подкидывая ему dll'ки, пока не заработает.
И тут еще выясняется, что нужно создать рядом с приложение папку platforms и туда закинуть qwindows.dll WTF?!!! Причем выясняется через stackoverflow.com, а не через официальную документацию.
Для построения графиков в Qt очень рекомендую QCustomPlot qcustomplot.com
Вот уж точно эталон удобства и качества. Добавил всего 2 файла в проект: cpp + h и все!
Это вам не Qwt, который нужно устанавливать в систему, подключать какие-то prf-файлы, собирать отдельно его проекты…OnYourLips
17.06.2016 12:42Это проблемы не Qt, а C++, из-за отсутствия в экосистеме языка менеджера зависимостей.
Проекты без Qt от этого страдают ещё сильнее (зависимостей гораздо больше).
Zifix
17.06.2016 13:15+4Далее, нигде нет списка необходимых dll, чтобы приложение заработало. Нужно иметь отдельную чистую виртуалку, и там пытаться запускать приложение, постепенно подкидывая ему dll'ки, пока не заработает.
windeployqt
И тут еще выясняется, что нужно создать рядом с приложение папку platforms и туда закинуть qwindows.dll WTF?!!! Причем выясняется через stackoverflow.com, а не через официальную документацию.ittakir
17.06.2016 13:40Ого, не знал про эту утилиту, спасибо.
Попробовал, натащила она 58 файлов в 9 папках. Большинство файлов не нужно. Но я все равно считаю, что это полный отстой в плане выпуска компактных приложений.
Не понимаю, почему нет варианта поставки Qt как статически собранного, чтобы на выходе был только 1 exe'шник?Dart_Sergius
17.06.2016 14:02Насколько я помню — проблемы лицензий. Поэтому стандартно нету поставки со статической линковкой. В любом случае если вам требуется такая поставка — вы должны обладать достаточным скилом чтобы собрать Qt самостоятельно и добиться нужного результата.
a1ien_n3t
17.06.2016 14:51Если вы собираете приложение статикой и отдаете заказчику это приложение, то он имеет полное право требовать предоставить ему исходный код. Так-что будьте осторожны передавая статически собранные приложения написанные на Qt.
ittakir
17.06.2016 15:58Я заказчику отдаю исходники, именно для этого он меня нанимает. Проблемы лицензирования Qt… хм, мы в какой стране живем? :)
Matumba
17.06.2016 15:11+1ну тогда можно взять Process Explorer и вручную копировать нужные dll. Только в таком случае нужно создавать иногда поддиректории. Например qwindows.dll нужно кидать не в корень с приложением, а в папку в созданную папку platforms.
BlackRaven86
17.06.2016 15:12Большинство файлов не нужно.
Как вы определили?ittakir
17.06.2016 15:55Сравнил с тем, минимумом, с которым приложение запускается. Ну и например создало папку sqldrivers, в которой кроме нужного мне sqlite есть еще odbc, psql, mysql. Или папка с переводами Qt на японский.
BlackRaven86
17.06.2016 16:05Плагины — это сложная штука, т.к. приложение не слинковано с ними и они загружаются в процессе работы программы. И как узнать, использует приложение плагин или нет? Для QML есть специальный сканер импортов, а вот для плюсов такого пока нет, насколько я знаю. Видимо, если вы используете SQL, то копируются все SQL-плагины.
Тут вам может помочь сборка Qt из исходников и без лишних плагинов :)
Torvald3d
17.06.2016 16:26Большинство файлов не нужно
Вот не сказал бы. На специфичных системах (например WinXP, слабые процессоры, отсутствие гпу и пр) некоторые библиотеки фаллбэкаются в другие. Например на большинстве машин есть библиотечка OpenGL. Там, где ее нет, Qt пытается использовать ANGLE, если не получается — софтварный рендер. Для каждого такого фаллбэка нужен свой набор библиотек, которые при обычных (идеальных) условиях даже не подключаются.
Free_ze
17.06.2016 14:29windeployqt для автоматического подтягивания зависимостей Qt.
А изыскания можно упростить тулами, которые покажут используемые модули. Для Windows это Dependency Walker или тот же Process Explorer из sysinternals(во время отладки).
BlackRaven86
17.06.2016 15:05Начнем с того, что линковка фактически только динамическая.
Нет.
Да, я знаю, что можно собрать самому Qt статически. Но я отдаю приложение неопытному заказчику, который не осилит это, поэтому остается вариант только стандартной поставки.
Если ваш заказчик осилит собрать приложение, то не такой уж он и неопытный ;)
Далее, нигде нет списка необходимых dll, чтобы приложение заработало. Нужно иметь отдельную чистую виртуалку, и там пытаться запускать приложение, постепенно подкидывая ему dll'ки, пока не заработает.
{win, mac, android}deployqt. Только под Linux пока что нет соответствующей утилиты.
Причем выясняется через stackoverflow.com, а не через официальную документацию
http://lmgtfy.com/?q=qt+applications+deploy&l=1
Xop
17.06.2016 16:00Вы ведь в курсе, что у QCustomPlot лицензия GPL, в отличие от Qwt, которая под LGPL?
RevenantX
17.06.2016 16:17>Далее, нигде нет списка необходимых dll, чтобы приложение заработало.
1) doc.qt.io/qt-5/windows-deployment.html
2) wiki.qt.io/Deploy_an_Application_on_Windows
3) doc.qt.io/qt-5/deployment.html
Dart_Sergius
17.06.2016 14:00А работу с контекстом в QJSEngine так и не сделали? Интегрирование в скриптовую машину всяких QList<Class*>, где Class — наследник QObject? На QtSctipt такие задачи решались 1-й функцей…
geher
17.06.2016 22:09+3А вот кто мне объяснит, почему 64 бит для Windows только под MSVC? Особенно удручает в этом тот факт, что нужно ставить этот самый MSVC отдельно. А если учесть, что со временем отпадает поддержка старых версий MSVC…
Когда мы увидим 64 бит, например, с mingw?
Конечно, можно собрать самому или найти готовую сборку от «стороннего производителя».
Но хотелось бы получить готовый инструмент для 64 бит (пусть даже ограниченный, если есть какие-то проблемы) сразу с выходом новой версии.NeoCode
18.06.2016 00:14Да, я тоже этого никогда не понимал. Места им на сервере что-ли жалко?
Я бы вообще предпочел полную матрицу всех возможных сочетаний сборок Qt: для всех ОС, всеми доступными на каждой ОС компиляторами, для всех доступных разрядностей. Например, для винды кроме msvc и mingw, доступен еще clang, пора бы и для него выкладывать сборки.BlackRaven86
18.06.2016 01:24Тогда они должны объявить это официальной сборкой и поддерживать. Плюс, официальные сборки же не просто собираются, но и постоянно тестируются при помощи CI.
encyclopedist
18.06.2016 02:12Clang для Windows теоретически должен же быть совместим с MSVC?
SvyatoslavMC
18.06.2016 21:33Теоретически он со всеми совместим, но на практике ещё можно столкнуться с проблемами. Иногда приходится отписывать в bug-трекер.
MaxAkaAltmer
18.06.2016 20:28+1QWebEngine под MINGW опять не поставляют, думал хоть к этой версии исправятся, 100 лет бы не использовал мелкомягкий компилятор, но у QwebKit постоянно течет память и исправлять никто не будет ибо выкинули окончательно, придется ставить студию… Как же все ужасно!
MaxAkaAltmer
18.06.2016 23:51Кстати, буквально сейчас нашел, если кому это тоже сильно мешает — единственная версия Qt в которой не происходит утечек памяти в QWebView при загрузке страниц, это 5.1, до и после поломаны.
akamensky
Я не понимаю зачем все еще тащат ICU в Windows. Само приложение в Windows получается намного меньше чем скомпилированное на Mac OS или Linux (примерно на 30-40% меньше), но из-за зависимости на ICU упакованный установщик получается примерно в 5 раз больше (в моем случае примерно 5-7MB на Mac/Linux против 20-25MB на Windows)
Насколько я помню были наполеоновские планы вообще убрать зависимость на ICU в 5.5. Но воз все там же.
akamensky
Вот специально поискал нашел репорт который говорит что пофиксили, но пофиксили как — надо руками собирать Qt, причем нигде не найти работающих инструкций. А сборка которая получается не заводится.
BlackRaven86
Почему это не найти? Есть иструкция, все собирается и работает.
akamensky
Извиняюсь не уточнил — под Windows для MinGW64. Есть официальная сборка для MinGW32, которая работает и под MinGW64, но для большинства приложений, с которыми я работаю, нужны именно 64-bit бинарники. И вот как раз ручная сборка под MinGW64 не работает.
Есть еще MSYS2 пакет, но он уже собран с жесткой зависимостью на ICU.
darkoff
Думаю, что основные силы брошены на поддержку новых возможностей и из-за этого удаление ICU приторможено. Если вам предложат выбор между += 20MB к размеру программы или возможность из коробки Charts, 3D etc будет целесообразнее выбрать возможности, так как можно начать разработку с новыми фишками и потом (ну должены же когда-то убрать ICU) обновить версию Qt.
akamensky
Мне кажется именно из-за такого мышления и не убрали до сих пор. Пока работают над новыми возможностями и думают «ну вот в следующем релизе уберем»; придет время следующего релиза а там будут новый функционал на добавку вместо работы над оптимизацией. Между тем количество жалоб по этому поводу просто огромно.
Ладно бы еще можно было руками собрать нормально, так ведь все библиотеки компилятся, я проект с ними не собирается.
VioletGiraffe
Использую windeployqt. Начиная то ли с 5.5, то ли с 5.6, он перестал копировать ICU, размер моего инсталлятора существенно уменьшился.
BlackRaven86
К сведению: установил 5.7 для MSVC 2015 32-бит, библиотек ICU в составе нет (в 5.6 есть).