17 июня 2016 в 01:12

Выпуск фреймворка Qt 5.7

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

Дополнительная информация


Никита Крупенько @BlackRaven86
карма
32,0
рейтинг 31,4
Программист C++/Qt и QML
Самое читаемое Разработка

Комментарии (44)

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

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

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

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

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


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

        Ладно бы еще можно было руками собрать нормально, так ведь все библиотеки компилятся, я проект с ними не собирается.
    • 0
      Использую windeployqt. Начиная то ли с 5.5, то ли с 5.6, он перестал копировать ICU, размер моего инсталлятора существенно уменьшился.
    • +1

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

  • –14
    Сори за оффтоп.
    К сожалению Qt — не самы распространенный фреймворк и программистов под него не так много как хотелось бы.
    А мы очень ищем именно C++/Qt
    Профиль вакансии тут: https://hh.ru/vacancy/17225983
    Приходите!
    • 0
      Тут еще важно сказать, что писать гуй на Qt Widgets и Qt Quick controls, как говорится, две большие разницы. Для последнего можно плюсы вообще не знать и писать все на javascript. Рекомендую в вакансии расписать стек технологий и указать версию Qt 4\5
    • +2
      > разработка агента для сбора дополнительных данных об активности сотрудников.

      Какой у вас милый проект, да и как нагло хантите в оффтопе.
      Где-то в аду есть специальное местечко для подобного, я уверен.
    • 0
      Непонятно, зачем вам обязательно готовые разработчики Qt. Там нет особого рокет сайнса и все это достаточно шустро осваивается.

      Искать же готового, учитывая не самую интересную тематику вашего продукта, и не самый вкусный ценник, действительно можно долго…
  • +1
    Для последнего можно плюсы вообще не знать и писать все на javascript.


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

    UPD: Промазал с ответом :/
    • 0
      Вот например клиент к Яндекс Диску на Js и QML без использования C++ https://habrahabr.ru/post/230435/ код проекта http://bazaar.launchpad.net/~mrqtros/yad/trunk/files
      • +1
        Да, можно пытаться все писать на QML и был такой тренд. Но я бы сказал, что он уже прошел :) В каких-то случаях может это и оправдано, но в целом, не стоит пытаться любой ценой избежать кода на плюсах и тащить все в QML.
  • 0
    А никто и не знал что в всех версиях Qt до 5.7.0 было ограничение (баг) количества тредов и сокетов 1000 на процесс.
    Как только количество сокетов или тредов доходило до 1000 то сразу вылет программы.
    Только в Qt 5.7.0 сняли ограничения и теперь можно строить действительно масштабированные сервисы.

    А еще в Qt 5.7.0 присутствует баг в плагине MySQL, next() с TINYINT UNSIGNED после вызова addBindValue() не читает значения больше 127.
  • 0
    «Модули Qt Script и Qt Enginio удалены из поставки.»

    Откуда информация про QtScript? Похоже, что она не верная.
    • 0
      Да, исправил. Удален был Qt Quick 1, а Qt Script пока еще остается как deprecated.
  • 0
    Всем хорош Qt, но процесс деплоя приложения продолжает угнетать.
    Начнем с того, что линковка фактически только динамическая. Да, я знаю, что можно собрать самому Qt статически. Но я отдаю приложение неопытному заказчику, который не осилит это, поэтому остается вариант только стандартной поставки.
    Далее, нигде нет списка необходимых dll, чтобы приложение заработало. Нужно иметь отдельную чистую виртуалку, и там пытаться запускать приложение, постепенно подкидывая ему dll'ки, пока не заработает.
    И тут еще выясняется, что нужно создать рядом с приложение папку platforms и туда закинуть qwindows.dll WTF?!!! Причем выясняется через stackoverflow.com, а не через официальную документацию.

    Для построения графиков в Qt очень рекомендую QCustomPlot qcustomplot.com
    Вот уж точно эталон удобства и качества. Добавил всего 2 файла в проект: cpp + h и все!
    Это вам не Qwt, который нужно устанавливать в систему, подключать какие-то prf-файлы, собирать отдельно его проекты…
    • 0
      Это проблемы не Qt, а C++, из-за отсутствия в экосистеме языка менеджера зависимостей.
      Проекты без Qt от этого страдают ещё сильнее (зависимостей гораздо больше).
    • +4
      Далее, нигде нет списка необходимых dll, чтобы приложение заработало. Нужно иметь отдельную чистую виртуалку, и там пытаться запускать приложение, постепенно подкидывая ему dll'ки, пока не заработает.
      И тут еще выясняется, что нужно создать рядом с приложение папку platforms и туда закинуть qwindows.dll WTF?!!! Причем выясняется через stackoverflow.com, а не через официальную документацию.
      windeployqt
      • 0
        Ого, не знал про эту утилиту, спасибо.
        Попробовал, натащила она 58 файлов в 9 папках. Большинство файлов не нужно. Но я все равно считаю, что это полный отстой в плане выпуска компактных приложений.
        Не понимаю, почему нет варианта поставки Qt как статически собранного, чтобы на выходе был только 1 exe'шник?
        • 0
          Насколько я помню — проблемы лицензий. Поэтому стандартно нету поставки со статической линковкой. В любом случае если вам требуется такая поставка — вы должны обладать достаточным скилом чтобы собрать Qt самостоятельно и добиться нужного результата.
        • 0
          Если вы собираете приложение статикой и отдаете заказчику это приложение, то он имеет полное право требовать предоставить ему исходный код. Так-что будьте осторожны передавая статически собранные приложения написанные на Qt.
          • +3
            он имеет полное право требовать предоставить ему объектные файлы
            fixed
            • 0
              Да так правильнее)
          • 0
            Я заказчику отдаю исходники, именно для этого он меня нанимает. Проблемы лицензирования Qt… хм, мы в какой стране живем? :)
        • +1
          ну тогда можно взять Process Explorer и вручную копировать нужные dll. Только в таком случае нужно создавать иногда поддиректории. Например qwindows.dll нужно кидать не в корень с приложением, а в папку в созданную папку platforms.
        • 0
          Большинство файлов не нужно.

          Как вы определили?
          • 0
            Сравнил с тем, минимумом, с которым приложение запускается. Ну и например создало папку sqldrivers, в которой кроме нужного мне sqlite есть еще odbc, psql, mysql. Или папка с переводами Qt на японский.
            • 0
              Плагины — это сложная штука, т.к. приложение не слинковано с ними и они загружаются в процессе работы программы. И как узнать, использует приложение плагин или нет? Для QML есть специальный сканер импортов, а вот для плюсов такого пока нет, насколько я знаю. Видимо, если вы используете SQL, то копируются все SQL-плагины.
              Тут вам может помочь сборка Qt из исходников и без лишних плагинов :)
        • 0
          Большинство файлов не нужно

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

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

      Нет.

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

      Если ваш заказчик осилит собрать приложение, то не такой уж он и неопытный ;)

      Далее, нигде нет списка необходимых dll, чтобы приложение заработало. Нужно иметь отдельную чистую виртуалку, и там пытаться запускать приложение, постепенно подкидывая ему dll'ки, пока не заработает.

      {win, mac, android}deployqt. Только под Linux пока что нет соответствующей утилиты.

      Причем выясняется через stackoverflow.com, а не через официальную документацию

      http://lmgtfy.com/?q=qt+applications+deploy&l=1
    • 0
      Вы ведь в курсе, что у QCustomPlot лицензия GPL, в отличие от Qwt, которая под LGPL?
    • 0
      >Далее, нигде нет списка необходимых 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
  • 0
    А работу с контекстом в QJSEngine так и не сделали? Интегрирование в скриптовую машину всяких QList<Class*>, где Class — наследник QObject? На QtSctipt такие задачи решались 1-й функцей…
  • +3
    А вот кто мне объяснит, почему 64 бит для Windows только под MSVC? Особенно удручает в этом тот факт, что нужно ставить этот самый MSVC отдельно. А если учесть, что со временем отпадает поддержка старых версий MSVC…
    Когда мы увидим 64 бит, например, с mingw?
    Конечно, можно собрать самому или найти готовую сборку от «стороннего производителя».
    Но хотелось бы получить готовый инструмент для 64 бит (пусть даже ограниченный, если есть какие-то проблемы) сразу с выходом новой версии.
    • 0
      Да, я тоже этого никогда не понимал. Места им на сервере что-ли жалко?
      Я бы вообще предпочел полную матрицу всех возможных сочетаний сборок Qt: для всех ОС, всеми доступными на каждой ОС компиляторами, для всех доступных разрядностей. Например, для винды кроме msvc и mingw, доступен еще clang, пора бы и для него выкладывать сборки.
      • 0
        Тогда они должны объявить это официальной сборкой и поддерживать. Плюс, официальные сборки же не просто собираются, но и постоянно тестируются при помощи CI.
      • 0

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

        • 0
          Теоретически он со всеми совместим, но на практике ещё можно столкнуться с проблемами. Иногда приходится отписывать в bug-трекер.
  • +1
    QWebEngine под MINGW опять не поставляют, думал хоть к этой версии исправятся, 100 лет бы не использовал мелкомягкий компилятор, но у QwebKit постоянно течет память и исправлять никто не будет ибо выкинули окончательно, придется ставить студию… Как же все ужасно!

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

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.