Вчера, спустя всего 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)


  1. akamensky
    17.06.2016 09:15
    +1

    Я не понимаю зачем все еще тащат ICU в Windows. Само приложение в Windows получается намного меньше чем скомпилированное на Mac OS или Linux (примерно на 30-40% меньше), но из-за зависимости на ICU упакованный установщик получается примерно в 5 раз больше (в моем случае примерно 5-7MB на Mac/Linux против 20-25MB на Windows)

    Насколько я помню были наполеоновские планы вообще убрать зависимость на ICU в 5.5. Но воз все там же.


    1. akamensky
      17.06.2016 09:29
      +1

      Вот специально поискал нашел репорт который говорит что пофиксили, но пофиксили как — надо руками собирать Qt, причем нигде не найти работающих инструкций. А сборка которая получается не заводится.


      1. BlackRaven86
        17.06.2016 09:54
        +2

        Почему это не найти? Есть иструкция, все собирается и работает.


        1. akamensky
          19.06.2016 12:08

          Извиняюсь не уточнил — под Windows для MinGW64. Есть официальная сборка для MinGW32, которая работает и под MinGW64, но для большинства приложений, с которыми я работаю, нужны именно 64-bit бинарники. И вот как раз ручная сборка под MinGW64 не работает.

          Есть еще MSYS2 пакет, но он уже собран с жесткой зависимостью на ICU.


    1. darkoff
      17.06.2016 09:36

      Думаю, что основные силы брошены на поддержку новых возможностей и из-за этого удаление ICU приторможено. Если вам предложат выбор между += 20MB к размеру программы или возможность из коробки Charts, 3D etc будет целесообразнее выбрать возможности, так как можно начать разработку с новыми фишками и потом (ну должены же когда-то убрать ICU) обновить версию Qt.


      1. akamensky
        17.06.2016 09:49

        ну должены же когда-то убрать ICU


        Мне кажется именно из-за такого мышления и не убрали до сих пор. Пока работают над новыми возможностями и думают «ну вот в следующем релизе уберем»; придет время следующего релиза а там будут новый функционал на добавку вместо работы над оптимизацией. Между тем количество жалоб по этому поводу просто огромно.

        Ладно бы еще можно было руками собрать нормально, так ведь все библиотеки компилятся, я проект с ними не собирается.


    1. VioletGiraffe
      17.06.2016 10:21

      Использую windeployqt. Начиная то ли с 5.5, то ли с 5.6, он перестал копировать ICU, размер моего инсталлятора существенно уменьшился.


    1. BlackRaven86
      17.06.2016 10:54
      +1

      К сведению: установил 5.7 для MSVC 2015 32-бит, библиотек ICU в составе нет (в 5.6 есть).


  1. AndrewIg
    17.06.2016 10:30
    -14

    Сори за оффтоп.
    К сожалению Qt — не самы распространенный фреймворк и программистов под него не так много как хотелось бы.
    А мы очень ищем именно C++/Qt
    Профиль вакансии тут: https://hh.ru/vacancy/17225983
    Приходите!


    1. JonNiBravo
      17.06.2016 11:28

      Тут еще важно сказать, что писать гуй на Qt Widgets и Qt Quick controls, как говорится, две большие разницы. Для последнего можно плюсы вообще не знать и писать все на javascript. Рекомендую в вакансии расписать стек технологий и указать версию Qt 4\5


    1. PixRaider
      17.06.2016 13:50
      +2

      > разработка агента для сбора дополнительных данных об активности сотрудников.

      Какой у вас милый проект, да и как нагло хантите в оффтопе.
      Где-то в аду есть специальное местечко для подобного, я уверен.


    1. dimas
      22.06.2016 15:26

      Непонятно, зачем вам обязательно готовые разработчики Qt. Там нет особого рокет сайнса и все это достаточно шустро осваивается.

      Искать же готового, учитывая не самую интересную тематику вашего продукта, и не самый вкусный ценник, действительно можно долго…


  1. BlackRaven86
    17.06.2016 11:40
    +1

    Для последнего можно плюсы вообще не знать и писать все на javascript.


    Очень спорное утверждение :)

    UPD: Промазал с ответом :/


    1. JonNiBravo
      17.06.2016 15:13

      Вот например клиент к Яндекс Диску на Js и QML без использования C++ https://habrahabr.ru/post/230435/ код проекта http://bazaar.launchpad.net/~mrqtros/yad/trunk/files


      1. BlackRaven86
        17.06.2016 15:24
        +1

        Да, можно пытаться все писать на QML и был такой тренд. Но я бы сказал, что он уже прошел :) В каких-то случаях может это и оправдано, но в целом, не стоит пытаться любой ценой избежать кода на плюсах и тащить все в QML.


  1. 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.


  1. govage
    17.06.2016 12:23

    «Модули Qt Script и Qt Enginio удалены из поставки.»

    Откуда информация про QtScript? Похоже, что она не верная.


    1. BlackRaven86
      17.06.2016 15:20

      Да, исправил. Удален был Qt Quick 1, а Qt Script пока еще остается как deprecated.


  1. 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-файлы, собирать отдельно его проекты…


    1. OnYourLips
      17.06.2016 12:42

      Это проблемы не Qt, а C++, из-за отсутствия в экосистеме языка менеджера зависимостей.
      Проекты без Qt от этого страдают ещё сильнее (зависимостей гораздо больше).


    1. Zifix
      17.06.2016 13:15
      +4

      Далее, нигде нет списка необходимых dll, чтобы приложение заработало. Нужно иметь отдельную чистую виртуалку, и там пытаться запускать приложение, постепенно подкидывая ему dll'ки, пока не заработает.
      И тут еще выясняется, что нужно создать рядом с приложение папку platforms и туда закинуть qwindows.dll WTF?!!! Причем выясняется через stackoverflow.com, а не через официальную документацию.
      windeployqt


      1. ittakir
        17.06.2016 13:40

        Ого, не знал про эту утилиту, спасибо.
        Попробовал, натащила она 58 файлов в 9 папках. Большинство файлов не нужно. Но я все равно считаю, что это полный отстой в плане выпуска компактных приложений.
        Не понимаю, почему нет варианта поставки Qt как статически собранного, чтобы на выходе был только 1 exe'шник?


        1. Dart_Sergius
          17.06.2016 14:02

          Насколько я помню — проблемы лицензий. Поэтому стандартно нету поставки со статической линковкой. В любом случае если вам требуется такая поставка — вы должны обладать достаточным скилом чтобы собрать Qt самостоятельно и добиться нужного результата.


        1. a1ien_n3t
          17.06.2016 14:51

          Если вы собираете приложение статикой и отдаете заказчику это приложение, то он имеет полное право требовать предоставить ему исходный код. Так-что будьте осторожны передавая статически собранные приложения написанные на Qt.


          1. Zifix
            17.06.2016 15:02
            +3

            он имеет полное право требовать предоставить ему объектные файлы
            fixed


            1. a1ien_n3t
              17.06.2016 16:21

              Да так правильнее)


          1. ittakir
            17.06.2016 15:58

            Я заказчику отдаю исходники, именно для этого он меня нанимает. Проблемы лицензирования Qt… хм, мы в какой стране живем? :)


        1. Matumba
          17.06.2016 15:11
          +1

          ну тогда можно взять Process Explorer и вручную копировать нужные dll. Только в таком случае нужно создавать иногда поддиректории. Например qwindows.dll нужно кидать не в корень с приложением, а в папку в созданную папку platforms.


        1. BlackRaven86
          17.06.2016 15:12

          Большинство файлов не нужно.

          Как вы определили?


          1. ittakir
            17.06.2016 15:55

            Сравнил с тем, минимумом, с которым приложение запускается. Ну и например создало папку sqldrivers, в которой кроме нужного мне sqlite есть еще odbc, psql, mysql. Или папка с переводами Qt на японский.


            1. BlackRaven86
              17.06.2016 16:05

              Плагины — это сложная штука, т.к. приложение не слинковано с ними и они загружаются в процессе работы программы. И как узнать, использует приложение плагин или нет? Для QML есть специальный сканер импортов, а вот для плюсов такого пока нет, насколько я знаю. Видимо, если вы используете SQL, то копируются все SQL-плагины.
              Тут вам может помочь сборка Qt из исходников и без лишних плагинов :)


        1. Torvald3d
          17.06.2016 16:26

          Большинство файлов не нужно

          Вот не сказал бы. На специфичных системах (например WinXP, слабые процессоры, отсутствие гпу и пр) некоторые библиотеки фаллбэкаются в другие. Например на большинстве машин есть библиотечка OpenGL. Там, где ее нет, Qt пытается использовать ANGLE, если не получается — софтварный рендер. Для каждого такого фаллбэка нужен свой набор библиотек, которые при обычных (идеальных) условиях даже не подключаются.


    1. Free_ze
      17.06.2016 14:29

      windeployqt для автоматического подтягивания зависимостей Qt.

      А изыскания можно упростить тулами, которые покажут используемые модули. Для Windows это Dependency Walker или тот же Process Explorer из sysinternals(во время отладки).


    1. 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


    1. Xop
      17.06.2016 16:00

      Вы ведь в курсе, что у QCustomPlot лицензия GPL, в отличие от Qwt, которая под LGPL?


    1. 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


  1. Dart_Sergius
    17.06.2016 14:00

    А работу с контекстом в QJSEngine так и не сделали? Интегрирование в скриптовую машину всяких QList<Class*>, где Class — наследник QObject? На QtSctipt такие задачи решались 1-й функцей…


  1. geher
    17.06.2016 22:09
    +3

    А вот кто мне объяснит, почему 64 бит для Windows только под MSVC? Особенно удручает в этом тот факт, что нужно ставить этот самый MSVC отдельно. А если учесть, что со временем отпадает поддержка старых версий MSVC…
    Когда мы увидим 64 бит, например, с mingw?
    Конечно, можно собрать самому или найти готовую сборку от «стороннего производителя».
    Но хотелось бы получить готовый инструмент для 64 бит (пусть даже ограниченный, если есть какие-то проблемы) сразу с выходом новой версии.


    1. NeoCode
      18.06.2016 00:14

      Да, я тоже этого никогда не понимал. Места им на сервере что-ли жалко?
      Я бы вообще предпочел полную матрицу всех возможных сочетаний сборок Qt: для всех ОС, всеми доступными на каждой ОС компиляторами, для всех доступных разрядностей. Например, для винды кроме msvc и mingw, доступен еще clang, пора бы и для него выкладывать сборки.


      1. BlackRaven86
        18.06.2016 01:24

        Тогда они должны объявить это официальной сборкой и поддерживать. Плюс, официальные сборки же не просто собираются, но и постоянно тестируются при помощи CI.


      1. encyclopedist
        18.06.2016 02:12

        Clang для Windows теоретически должен же быть совместим с MSVC?


        1. SvyatoslavMC
          18.06.2016 21:33

          Теоретически он со всеми совместим, но на практике ещё можно столкнуться с проблемами. Иногда приходится отписывать в bug-трекер.


  1. MaxAkaAltmer
    18.06.2016 20:28
    +1

    QWebEngine под MINGW опять не поставляют, думал хоть к этой версии исправятся, 100 лет бы не использовал мелкомягкий компилятор, но у QwebKit постоянно течет память и исправлять никто не будет ибо выкинули окончательно, придется ставить студию… Как же все ужасно!


    1. MaxAkaAltmer
      18.06.2016 23:51

      Кстати, буквально сейчас нашел, если кому это тоже сильно мешает — единственная версия Qt в которой не происходит утечек памяти в QWebView при загрузке страниц, это 5.1, до и после поломаны.