На прошлой неделе, после девяти месяцев разработки, вышла версия 5.6 кроссплатформенного фреймворка Qt.

Qt позволяет разрабатывать приложения при помощи C++ и декларативного языка программирования QML, поддерживает все основные десктопные и мобильные платформы, а также некоторые встраиваемые и имеет открытый исходный код. Существует коммерческая версия Qt, содержащая дополнительные проприетарные модули.

Новый выпуск принес длительный срок поддержки, новые экспериментальные модули (и удаление устаревших), поддержку новых платформ, а также новый тарифный план для стартапов в коммерческой версии Qt.



Длительной срок поддержки


Версия 5.6 является первым LTS-выпуском в пятом Qt и будет поддерживаться и получать обновления три года, в отличии от обычных выпусков, у которых срок поддержки будет один год. С учетом того, что поддержка предыдущей LTS-версии 4.8 была прекращена в конце прошлого года, рекомендуется переход на Qt 5.6.

Также, в следующих версиях планируется убрать поддержку устаревших компиляторов, в которых недостаточно реализован функционал C++11. Те, кому важна поддержка VS2010 и gcc 4.6, смогут остаться на версии 5.6.

Лицензия для стартапов


Для небольших компаний с доходом до 100 000$ появилась новая лицензия "Start-Up", пришедшая на замену Indie Mobile, продажи которой были прекращены. Стоимость лицензии начинается от 49$ (при покупке в течении двух месяцев после выпуска).

Напомню, что Qt 5.6 будет последним минорным выпуском, доступным под лицензией LGPLv2.1. Начиная с версии 5.7, будет использоваться LGPL и GPL третьей версии.

Поддержка экранов с высоким разрешением


В новой версии для всех платформ появилась возможность автоматического масштабирования на экранах с высоким разрешением (HiDPI), как это было раньше на MacOSX. При включении масштабирования, Qt будет автоматически подстраивать размеры графических элементов и шрифтов, а также загружать изображения нужного размера. Масштабирование также автоматически подстраивается при перемещении окна между экранами с разной плотностью точек.

Новые модули


Модуль Qt Location, появившийся в прошлом выпуске как предварительная версия, теперь входит в состав Qt. Добавлена предварительная версия модуля Qt SerialBus, позволяющего работать с шинами CanBUS и ModBus.

Также в состав Qt 5.6 включена предварительная версия модуля Qt Quick Controls 2.0 (в Qt 5.6 он называется Qt Labs Controls), который является новой реализацией библиотеки компонентов для создания пользовательского интерфейса при помощи Qt Quick. Новая версия более легковесная и оптимизирована для использования на встраиваемых устройствах, построена по принципу шаблонов, позволяющих полностью изменить внешний вид компонентов и имеет, помимо стандартной темы, поддержку стилей Material и Universal. Видео с конференции QtWS15, где показана ранняя версия Qt Quick Controls 2.0:


Изменения в существующих модулях


  • В Qt WebEngine движок Chromium обновлен до версии 45 и получил поддержку плагинов PPAPI, таких как Flash. С Qt WebKit портирован WebActions API и добавлено низкоуровневое API WebEngineCore. Также появилась возможность использовать системные настройки прокси. Версия для Linux Qt WebEngine может быть собрана с использованием системных библиотек.

  • Улучшена совместимость контейнеров с C++11 и STL: добавлены обратные итераторы, key_iterator для QHash и QMap, а также const_iterator для QByteArray. Множество улучшений производительности в QString. QNetworkAccessManager получил поддержку перенаправления запросов HTTP.

  • В Qt Multimedia появился новый QML-тип Playlist, а также Audio Role API для медиаплееров. На WinRT в работе с камерой добавлена поддержка использования фокуса и предпросмотра видео.

  • Qt QML получил поддержку записи имен JavaScript-функций в вывод для планировщика perf на Linux, а также уменьшенное потребление памяти.

  • Qt Canvas 3D теперь может использовать компоненты, основанные на Item из Qt Quick в качестве текстуры, а также поддерживает рендеринг на прямую в сцену Qt Quick.

  • В Qt Virtual Keyboard появилось распознавание рукописного ввода.

  • Модуль Qt 3D получил значительное количество улучшений и в этом выпуске также поставляется как предварительная версия.

Удаленные и устаревшие модули


Модуль Qt Script объявлен устаревшим и пользователям рекомендуется перейти на Qt QML. Также устаревшим объявлен Qt Enginio. Модули Qt Webkit и Qt Quick 1 (Qt Declarative) удалены из поставки. Помимо этого, по соображениям безопасности, официальные выпуски собираются без поддержки форматов изображений MNG и JPEG2000. При необходимости, Qt может быть собрана из исходников с включением поддержки данных форматов.

Поддержка платформ


  • В версии 5.6 включена полноценная поддержка Windows 10, как с ипользованием API win32, так и WinRT. Приложения на Qt могут запускаться на ПК, планшетах и телефонах, а также распространяться через Windows Store. Стали доступны бинарные сборки для Visual Studio 2015. Также добавилась поддержка Windows Embedded Compact 2013. На платформе WinRT появился Qt WebView.

  • В Qt 5.6 for Device Creation появилась возможность разработки и развертывания напрямую из под Windows. В стеке Boot to Qt улучшена совместимость с системами на основе Yocto.

  • Добавлена поддержка NVIDIA Jetson TK1 с использование нового eglfs-бекенда, использующего DRM, EGLDevice и EGLStream. также добавлена поддержка Intel NUC. Полный список встроенных платформ можно посмотреть здесь.

  • Android получил поддержку Qt Nfc. На MacOSX появилась поддержка Qt Positioning и опциональная возможность использования FreeType.

  • На Linux появилась возможность записи логов напрямую в syslog.

Изменения в инфраструктуре


При разработке новой версии, на замену предыдущей системе непрерывной интеграции на основе Jenkins, была введена введена в строй новая CI-система собственной разработки — COIN. Новая система позволила повысить скорость тестирования и интеграции изменений в Qt. Помимо этого, COIN позволяет использовать разный набор платформ для разных веток Qt. Еще одним преимуществом является то, что большинство бинарных сборок теперь собирается на таких же системах, на каких и тестируется, т.е. тестируются именно те сборки, которые в последствии и выпускаются.

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


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


  1. Harrix
    21.03.2016 09:19
    +1

    Выскажу пару моментов.

    1. WebEngine — это круто, но жаль, что версия под MinGW в пролете. А Webkit убрали. Ничего не оставив под MinGW.
    2. "Qt Script объявлен устаревшим и пользователям рекомендуется перейти на Qt QML". Может я не понял, но разве не QJSEngine его заменяет?
    3. Но я думаю, что очень многие гораздо с большим нетерпением ждут 5.7, где обещают очень много вкусного.


    1. RPG18
      21.03.2016 10:26

      Чем вам JavaScript в QJSEngine не устраивает?


      1. Harrix
        21.03.2016 10:28

        Ничем) Просто написано, что заменяется Qt QML, а вроде QJSEngine.


      1. evilruff
        21.03.2016 16:49

        На самом деле это очень спорное решение, вот здесь обсуждалось: forum.qt.io/topic/52306/qt-5-5-qt-script-deprecated-what-is-replacement, (к сожалению после того как Qt сделало merge аккаунтов, мои комментарии там стали просто под серым невидимкой =)), это заблуждение думать что QJSEngine везде и всегда заменяет легковесный и отлично интегрированный QtScript. Я применял его в проектах не имеющих ничего общего с QML начиная еще с Qt 3.* — там он был еще не не ECMA совместимый, но кстати тоже отлично читаемый с С++ подобным синтаксисом.

        Не всегда и не везде есть/нужно тащить за собой V8 реализацию если просто требуется какую то несложную обвязку вынести «наружу» в скрипт.

        Я приводил пример в этом топике, он отлично подходил, например для описывания правил фильтрации/сортировки в моделях, построенных на коллекциях QObject-ов…


        1. RPG18
          21.03.2016 17:15
          +1

          В Qt5.2 V8 заменили на V4


          1. evilruff
            21.03.2016 18:16

            Да, Вы правы, но это не меняет сути… QtScript был очень легковесной, при этом достаточно стабильной реализацией, который не требовал вообщем то ничего, чтобы его использовать… тут на самом деле "все стороны правы", но только в данном случае Qt применяется такой широкой массой разработчиков и в таком широком спектре задач, что правда у каждого будет своя, ну и в конечном итоге решать все равно будут те кто у руля..


    1. ilnuribat
      21.03.2016 13:02
      +1

      а что вкусненького в 5.7 ожидается?


      1. Harrix
        21.03.2016 14:39

        https://wiki.qt.io/New_Features_in_Qt_5.7

        Они многие модули, например, которые были в коммерческой версии, добавят в Open Source версию. Те же графики, наконец, появятся.


    1. evilruff
      21.03.2016 16:58
      +2

      Разговаривал на QT Dev 2015 в Берлине с разработчиком WebEngine, услышал много вздохов и увидел много печали в глазах, но вменяемого ответа о том — зачем выпиливать отлично интегрированный Веб движек, прекрасно положенный в инфраструктуру Qt и используемый в очень большом количестве десктопных бизнес приложений и впиливать нечто даже функционально не всегда совместимое не услышал…

      Сравните степень интеграции WebKit с поддержкой native QNetworkAcessManager, QNetworkRequest, QNetworkReply, полностью контролируемого и использующего стандартный для Qt транспортный уровень и сравните с текущим состоянием WebEngine… где ряд вещей просто технически пока не переносятся, вне зависимости от размера бубна…

      По сути последние годы развития Qt это путь в мобильные платформы и понятно что сделать обертку на native webview для каждой из платформ в текущем виде WebEngine гораздо проще чем через интерфейсы WebView, но господа Qt-шники, мир крутится не только вокруг embedded и mobile и есть огромное количество enterprise приложений где новое не всегда лучше хорошо работающего старого…


      1. RPG18
        21.03.2016 17:24

        Коллега ходил на тренинг от Digia по Qt, и там высказались что теперь стараются заработать на embedded, а не на Desktop'e.
        Наверное поэтому они для некоторых компонентов(Чарты, клавиатура и т.д.) поменяли лицензии. Хорошо или плохо вопрос сложный(хорошо или плохо, что появились Qt Charts, Qt Data Visualization и т.д.)


        1. evilruff
          21.03.2016 18:13

          ну я двумя руками "за" что развивается что то новое и прогрессивное, мне очень нравится QML и я могу представить себе очень много разных его применений, и на десктопе в том числе… но если посмотреть например success story того же KDAB, там очень много enterprise применений, исключительно widget-ных, и забывать про них, на мой взгляд не правильно… мне сложно судить на чем они реально зарабатывают, но мне кажется что будет печально если Qt прошагает дорогой Нокии… а компоненты которые Вы привели в пример, действительно классные… но при этом опустившись на небо и посмотрев в исходники например чего то более базового… например TableView, можно увидеть массу "костылей"…


    1. BlackRaven86
      21.03.2016 17:19
      +1

      QJSEngine, да. Но входит оно в модуль Qt Qml. Поэтому, QScriptEngine -> QJSEngine, Qt Script -> Qt QML.


      1. Harrix
        21.03.2016 17:43

        Спасибо за разъяснение!


  1. iroln
    21.03.2016 15:14

    А модуль Qt Charts доступен в этом релизе в бесплатной лицензии? Вроде я что-то такое слышал, что этот компонент должен стать доступным в бесплатной лицензии, начиная с какого-то релиза. Сейчас он входит в Qt Commercial.


    1. Harrix
      21.03.2016 15:39
      +1

      В следующей итерации так и будет. В 5.7. В 5.6 еще нет.


      1. BlackRaven86
        21.03.2016 17:21
        +1

        В составе сборок Qt еще нет. Но собрать самому из исходников уже можно :)


    1. tty6
      21.03.2016 17:39
      +1

      Если очень хочется посмотреть как выглядят Qt Charts, а ждать 5.7 ну никак не хочется, можно попробовать собрать их самостоятельно из codereview.qt-project.org/#/admin/projects/qt/qtcharts.


  1. IGHOR
    21.03.2016 21:33
    +1

    Потратил пару дней на попытку перехода до 5.6.0 и скажу что там еще много багов.
    При статик сборке никак не получается скомпилировать или отключить FreeType.
    В нетронутых сборках с официального сайта использование addBindValue в MySQL приводит к ошибке "QMYSQL3: Unable to fetch data", хотя все прекрасно работает в 5.5.1.
    Подозреваю там еще много подводных камней которые нуждаются в фиксах.
    Так что ждем 5.6.1


    1. BlackRaven86
      22.03.2016 03:48

      Далеко не все исправления вошли в 5.6.0. Возможно, давно уже исправлено, но пока только в гите. Ну а если в гите нет — вы знаете, что делать ;)


      1. IGHOR
        22.03.2016 04:04

        Там уже не один мой баг репорт.
        Времени не всегда хватает на копания и поиски решений, а тем более ждать когда пофиксят их на багтрекере.
        Я о том что с версиями х.х.0 всегда больше времени на переход уходит, и что проще пропустить их, подождать х.х.1 версию.


  1. horo
    22.03.2016 14:14

    Небольшое уточнение: под MSVS 2008 эта версия не собирается и в supported platforms её нет. Нужна, как минимум десятая студия.


    1. BlackRaven86
      22.03.2016 14:17

      Спасибо, поправил. VS2008 поддерживается только для Windows Embedded 7.


      1. horo
        22.03.2016 15:00

        Собственно, официально MSVS2008 не поддерживается в Qt5 уже давно (если такое вообще было), но 5.5.1 ещё можно было собрать без особых проблем, а в этой сломалось что-то основательное.