Большая часть информации по Qt (новости, информация на сайте, статьи, публикации в блоге, аккаунты в соц.сетях) доступна только на английском языке. И хотя каждый разработчик желательно-обязательно должен владеть английским, для многих языковой барьер по-прежнему является проблемой. Я работаю в The Qt Company (в офисе Осло, Норвегия), и видя как обделено вниманием весьма немаленькое русскоязычное сообщество, я решил написать эту статью на русском и рассказать немного о прошедшей на позапрошлой неделе в Нюрнберге конференции Embedded World 2017, а также поделиться планами компании на будущие релизы Qt. Но хотя статья и на русском, ссылки всё же ведут на английскую документацию, а также некоторые термины я решил оставить в оригинале. Embedded World — это ежегодная выставка, посвящённая embedded ("встраиваемым") решениям и всему с этим связанным. Здесь присутствуют производители "железа" (портативные устройства, платы и микроконтроллеры от Intel, NVIDIA, Toradex, NXP, Qualcomm и других), программного обеспечения (операционные системы и фреймворки от Microsoft, QNX, Green Hills, Wind River и других), а также множество сервисных компаний. Ну и конечно The Qt Company тоже принимала участие в выставке, так как разработка под embedded платформы для компании сейчас является приоритетным направлением. В этом году у нас был самый большой стенд — 200 квадратных метров — наравне с Microsoft и Intel. Кроме нашего стенда Qt можно было увидеть также и на стендах других компаний (включая Microsoft), просто потому что они использовали Qt в своих продуктах (например). И кстати, проходя по выставке, встретили одну сервисную компанию sequality, которая помимо прочего внезапно показывала на своём стенде сравнение HTML и QML. Мы, конечно же, немедленно взяли у них интервью. Суть их демонстрации в том, что одно и то же приложение было реализовано на HTML (AngularJS) и на QML, при этом разработчик не имел до этого опыта работы с QML: Хотелось бы, чтобы побольше людей посмотрели это видео, особенно производители ТВ-приставок и медиа-центров для пассажиров в самолётах. Кроме уже стандартного набора демо (Boot to Qt, профилирование и отладка на embedded платформах, использование Qt SCXML) были показаны и новые. Фото и видео мало, потому что я понадеялся на специального человека с камерой, который всё снимал, но эти материалы до сих пор в обработке и должны будут появиться на странице мероприятия. Анонсированный в июне 2016 Automotive Suite — фреймворк для создания цифрового инструментального кластера и IVI в автомобилях — приобретает всё более отчётливую форму. В "автомобильной части" стенда демонстрировался пример решения на основе совместной работы RTOS INTEGRITY (для инструментального кластера) и Embedded Linux (для IVI — Neptune UI, менеджер приложений и примеры самих приложений: навигация, музыкальный плеер и т.д.) под управлением гипервизора на одном девайсе (head-unit). Само-собой, инструментальный кластер и IVI выводятся на разные дисплеи (фото не с самой выставки, но выглядело примерно так же):  Также уже по традиции демонстрировалась быстрая загрузка устройства с использованием Boot to Qt: Qt Configuration Tool — инструмент для настройки сборки Qt. Демонстрировалось, как можно исключить ненужные компоненты, просто "отжимая" соответствующие чекбоксы в дереве компонентов, и переконфигурировать Qt, получив меньший размер сборки. Qt 3D Studio — бывшая NVIDIA DRIVE Design Studio. Показали текущее (уже рабочее) состояние инструмента, демонстрируя создание простого шаблона IVI с интеграцией результата в виде QML-объекта и взаимодействие с ним. Если можно так это назвать. Это простенький сенсор с гироскопом, который отправляет данные по Bluetooth в управляющее устройство, которое строит график на основе этих данных и отображает на дисплее с динамической визуализацией, одновременно передавая данные на сервер, с которого их забирает приложение на Android-планшете, которое опять же отображает это в виде графиков с динамической визуализацией. Звучит не очень захватывающе, но вживую это выглядело более интересно — с помощью этого сенсора нужно было собрать на дисплее логотип Qt из трёх вращающихся элементов, каждый из которых реагировал на изменения определённой оси гироскопа. Как я сказал, все изменения отображались также и на Android-планшете, что и было целью демонстрации — в промышленной автоматизации достаточно распространены сценарии, когда оборудование раскидано по огромной территории условного завода, а инженеру нужно контролировать это всё со своего (мобильного) рабочего места. Кроме демо и небольших презентаций также отвечали на вопросы посетителей. Всё ещё попадаются вопросы вида "а Qt это разве не просто UI-фреймворк для Линукса? Вы ещё и в embedded что-то делаете?". На нашем стенде кроме самой The Qt Company были представлены также партнёры по экосистеме: KDAB, froglogic, Witekio, brightONE, basysKom, e-GITS, Toradex, LinkMotion. Также демонстрировались продукты клиентов компании: Rimac и Ulstein. KDAB демонстрировали инструмент для интроспекции Qt-приложений — GammaRay:  А также показывали возможности трёхмерной диагностики автомобиля с использованием дополненной реальности. Как это работало — на кузове автомобиля были нанесены QR-коды, а в приложении на планшете можно было наводить камеру на ту или иную часть машины, и на экране "дорисовывался" трёхмерный объект, например, двигателя. Демонстрировали Squish — инструмент для тестирования, который позволяет проводить GUI-тесты не только для десктопных приложений, но и на embedded платформах.  Представляли свой бортовой компьютер (carputer) — уже готовое решение (железо плюс софт), реализующее сразу и инструментальный кластер (спидометр, тахометр и прочее), и IVI (развлекательная система внутри автомобиля: медиа, приложения, навигация и т.д.):  Rimac — это крутая автомобильная компания из Хорватии, создатель электросуперкаров, которые уделывают Porshe 918 и LaFerrari. Они привезли на выставку свой Concept One, который стоял в самом центре стенда:   Rimac использовали Qt при разработке внутренних систем автомобиля (UI, сбор информации с датчиков, взаимодействие с сервером):  Краткий обзор запланированных изменений и новых компонентов Qt. Большая часть информации уже была опубликована в блоге. Список изменений грядущей версии 5.9 можно посмотреть на вики. Так выглядел старый roadmap:  За исключением Qt Quick Compiler к текущей версии 5.8 всё было реализовано по плану. А вот новый roadmap:  И далее чуть более подробнее. На данный момент компания предлагает два (три) продукта: Application Development и Device Creation. К ним почти присоединился Automotive Suite. Сейчас идёт работа над созданием продукта для индустриальной автоматизации и, возможно, отдельного продукта для STB, они же set-top box (ТВ-приставки). Это, если можно так сказать, "магазин приложений" внутри Qt, только вместо приложений будут библиотеки и плагины. Как бы NuGet для Visual Studio. Сейчас ничего точно не известно, всё ещё только обсуждается, но идея такая, что любая компания может опубликовать свой плагин/библиотеку в "Qt Store" — например, реализацию протокола KNX, и далее любой пользователь может приобрести этот плагин/библиотеку и использовать его в своём проекте. Всё публикуемое в сторе будет предварительно проходить проверки на совместимость и прочее такое, чтобы для пользователя процесс установки и использования был максимально простым. Компания-разработчик, соответственно, получает свою долю от продажи, Qt — свою комиссию. Конкретное процентное соотношение ещё даже не начало обсуждаться, всё это только планы и идеи. Сейчас это подготавливается в рамках предложения для индустриальной автоматизации (потому я привёл пример с KNX), но, безусловно, это должно стать доступно во всех продуктах Qt. Глядя на то, как используется Qt Quick Designer (почти никак), было решено совместить режим кода и режим дизайна:  Кэш для OpenGL шейдеров, позволяющий значительно снизить время их инициализации. То есть, после первого запуска приложения последующие будут происходить быстрее, и это актуально даже для драйверов с собственной реализацией шейдерного кэша (хотя и в меньшей степени). Идёт разработка механизма для совместного использования таких ресурсов как битмапы (изображения) с целью уменьшения потребления памяти в мультипроцессорных системах. В результате будет сокращено время запуска приложения и, собственно, снижено потребление оперативной памяти. Возможность использования не только OpenGL, но и других графических бэкэндов, например Vulkan. Конкретно в Qt 5.9 ожидается поддержка OpenVG, что позволит запускать Qt Quick приложения на платформах без поддержки OpenGL, но имеющих OpenVG — однако, по аналогии с 2D Renderer, не все возможности будут доступны (к примеру, графические эффекты, частицы). Сразу скажу, что для Qt Widgets по-прежнему ничего нового не планируется, виджеты считаются "устоявшейся" технологией, к тому же не очень подходящей для embedded платформ (которые сейчас в приоритете), потому Qt Quick остаётся в фокусе, и всё новое будет появляться именно здесь. Однако, это не означает, что виджеты будут заброшены — исправления и улучшения будут продолжать выходить, но рассчитывать на что-то новое для них не приходится (хотя обсуждения на эту тему ведутся внутри команды разработки). Продолжается работа над реализацией встроенного функционала Qt Quick Compiler. На очереди добавление "ahead-of-time" генерации кэша в дополнение к уже реализованному механизму кэширования. По плану Qt Quick Compiler должен был "исчезнуть" ещё в версии 5.8(9), однако не всё пошло по плану, и потому коммерческие пользователи по-прежнему имеют это преимущество перед пользователями Open Source версии (в которой Qt Quick Compiler отсутствует). Новые элементы Qt Quick Controls: во-первых, уже достаточно давно обещанный TableView, а также DelayButton, ScrollView, редактируемый ComboBox и поддержка "множественного касания" (мультитач). Улучшения в движке QML. Из наиболее значительного — переработка сборщика мусора с целью улучшения производительности и уменьшения потребления памяти Qt Quick приложениями. Path rendering (примитивы) в Qt Quick. Это позволит декларативно создавать сложные фигуры из линий, кривых и дуг используя непосредственно QML (с аппаратным ускорением), что означает существенный прирост производительности по сравнению с текущим положением дел. Будут также специфичные расширения в зависимости от вендора (для железа от NVIDIA, например).  Недавно анонсированный WebGL-стриминг (трансляция GUI) позволяет использовать веб-браузер (или опять же Qt приложение) в качестве "удалённого дисплея" для девайса, который будет "транслировать" свой GUI по сети. В случае с браузером всё будет работать без необходимости предустанавливать что-либо на клиент (десктоп, планшет, телефон) — нужна лишь поддержка WebGL в браузере. Ввод с мыши/клавиатуры/тачскрина будет передаваться обратно в Qt приложение на девайсе. Данный сценарий особенно актуален для устройств без собственного дисплея, а также для тех, что размещены в труднодоступных для человека местах (на супер-далёком складе, на сто двадцать седьмом этаже или вообще под водой). Так называемые native common controls. На данный момент это исключительно в рамках эксперимента по реализации универсального набора "нативных" контролов, которые будут выглядеть как "родные" на всех поддерживаемых платформах. Продвинется ли проект дальше эксперимента — пока не известно. Как это будет соотноситься с существующими Qt Quick Controls — пока не известно. Несколько направлений, в которых ведётся разработка: Довольно нередки вопросы по поводу инструментов для дизайнеров, и особенно инструментов по созданию 3D интерфейсов — как ни странно, но оказалось, что это довольно востребовано, и основной поток запросов поступает из авто-индустрии (3D в инструментальном кластере и IVI), а также от производителей бытовой техники (кофемашины, "умные" холодильники и прочее). До текущего момента из подобного был лишь Qt Designer (который, на самом деле, не очень подходит для дизайнеров), а также импорт из Photoshop'а посредством PNG Express (кстати, забегая вперёд, для импорта из сторонних редакторов будет представлен новый механизм, но сейчас не об этом). Но теперь, как было объявлено, NVIDIA безвозмездно предоставила свой продукт NVIDIA DRIVE Design Studio, как вклад в развитие Qt. Это как раз-таки редактор для создания 3D GUI, ориентированный больше на дизайнеров, чем на разработчиков. NVIDIA решила, что так продукт будет получит более светлое будущее, потому как они столкнулись с некоторым недоверием на рынке — использование продукта подразумевало "железную" зависимость от NVIDIA, так как работать результат мог только на аппаратном обеспечении NVIDIA. Соответственно, под управлением The Qt Company решение будет "освобождено" от этих "недостатков". Работа уже ведётся, и одним из первым поддерживаемых не-NVIDIA девайсов был(а) выбран(а) Raspberry Pi. В целом же, интеграция решения в Qt не ограничивается лишь сменой логотипа и переименованием. В планах реализация максимально "плотной" интеграции с задействованием уже существующего 3D фреймворка Qt. Запланированная дата публичной бета-версии — где-то во второй половине 2017. Полноценный релиз, вероятно, уже в 2018. Сейчас проект не распространяется даже внутри компании, всё лежит в закрытом репозитории, но относительно скоро должны раздать доступ, и тогда я думаю написать некоторый обзор "из первых рук". "Оживление" поддержки RTOS INTEGRITY. Работа над поддержкой платформ Apple. Apple TV: tvOS — на 95% почти то же самое, что и iOS, потому поддержка этой платформы по крайней мере заявлена. Основные затруднения сейчас вызывает система ввода (так как там используется пульт), однако первые демо уже успешно опробовали. Apple Watch: на данный момент поддерживается без GUI — то есть, аудио, сеть, какая-нибудь фоновая обработка и прочее. В дальнейших планах обзор на новую Qt 3D Studio, когда состоится её внутренний релиз, а также статья про текущее состояние с лицензиями и отличия между ними (ну очень много вопросов на эту тему). P.S. Компания сейчас активно нанимает людей, в этом году планируется найти более ста человек (не только разработчиков). Про хантинг в статьях не рекомендуется, я знаю, но просто возможности компании по поиску людей в неанглоговорящих странах ограничены, потому вряд ли когда-либо появятся объявления на moikrug.ru, HH и других. В общем, если интересно, я могу рассказать немного подробнее. P.P.S. А вложенные списки в HTML-разметку так и не завезли? Или автогенерирующееся содержание (TOC)? upd. На некоторые комментарии буду отвечать не сразу — сначала попробую получить более подробную информацию у конкретных людей, занятых в разработке интересующей штуки. оператор ЭВМ