Мы рады сообщить о выпуске альфа-версии Qt 5 — первого значительного релиза Qt с момента запуска сообщества Qt Project. Команда разработчиков Nokia благодарит всех энтузиастов этого комьюнити, принимающих непосредственное участие в создании Qt 5 Alpha, ведь многие возможности Qt 5 стали доступны именно благодаря их сплоченной работе. Нам очень приятно, что Qt Project стал местом, где люди объединяются, чтобы совместными усилиями развивать любимый фреймворк.
Основной целью альфа-версии Qt 5 является получение фидбека от разработчиков, который поможет улучшить все последующие релизы. В альфа-релизе Qt 5 акцент ставился на предоставлении основных модулей Qt Essentials, формирующих базовый функционал Qt 5. Это кросс-платформенные модули, достаточные для создания большинства приложений.
В виде бинарного пакета Qt 5 Alpha распространяться не будет, но для самостоятельной компиляции доступны исходные файлы. Разумеется, доступна и инструкция по компиляции.
Разработка Qt 5 началась примерно 9 месяцев назад, преследуя несколько основных целей, описанных в мае прошлого года директором по развитию Qt в Nokia Ларсом Ноллом. Ниже будет список этих целей и того, что уже было достигнуто.
Основная концепция
Почти год назад Ларс Нолл писал:
«Qt 5 должен стать фундаментом для реализации новых путей разработки приложений. Сохраняя инструменты по созданию Qt-приложений на языке C++, акцент стоит сместить в сторону использования C++ в основном для создания функциональности модульных бэкендов для Qt Quick».
Мы нашли хороший способ приблизиться к этой концепции в Qt 5.0. Данная модель прекрасно работает во встраиваемых системах, где используются полноэкранные интерфейсы. Для применения этой модели в десктопах уже подготовлена большая часть фундамента, но полностью её использовать можно будет в версиях Qt 5.1 или 5.2.
Открытая разработка
Мы хотели вести открытую разработку Qt 5 с поддержкой мощного сообщества. После запуска Qt Project мы стали свидетелями формирования энергичного сообщества, благодаря которому в Qt 5 были исправлены многие недочёты и появились новые возможности.
Основные архитектурные изменения
- Перенос всех Qt-портов на использование уровня абстракции Qt Platform Abstraction layer (QPA). Данное изменение упрощает портирование Qt на другие оконные системы и устройства
Благодаря QPA мы фундаментально изменили средства интеграции Qt с оконными системами. QPA был представлен в Qt 4.8 в качестве замены QWS/Qt Embedded, но теперь он будет задействован для всех платформ. Это решение потребовало существенной переработки огромной части кода, отвечающего за обеспечение поддержки различных платформ, но зато помогло нам создать более чистую архитектуру с абстрактным платформозависимым кодом. Это значительно упрощает перенос на новые оконные системы, и уже написанные для QNX, Android и iOS бэкенды тому доказательство.
- Изменение архитектуры графического стека. Увеличение производительности, благодаря использованию Qt Quick и OpenGL (ES) 2.0
В Qt 5 представлена новая графическая архитектура для Qt Quick на основе QML Scenegraph, работающего поверх OpenGL. Для работы новой архитектуры система должна поддерживать как минимум OpenGL (ES) 2.0. Теперь QtGui содержит набор классов QOpenGL*, пришедших на замену классам QGL* (хоть они и остались для обеспечения совместимости). Также в Qt 5 вводится новый класс QGuiApplication, который многим легче классов QApplication и QWindow при выполнении задач обработки на экране корневых окон.
Видеоэффекты в Qt 5
Поддержка QWidget сохранена, но ограничена возможностью использования бэкенда программной растеризации, бэкенда OpenGL и бэкенда для генерации и печати PDF. Поддержка привязанных к платформам бэкендов, использующих X11 или CoreGraphics, была прекращена, что позволило перейти в Qt 5 на совершенно новую графическую архитектуру, сохранив при этом полную совместимость с Qt 4.x на стороне QWidget.
- Модульная структура репозитория для повышения гибкости и объединения декстопных и мобильных систем — возможность при необходимости добавлять и удалять пользовательские модули и полная интеграция API Qt Mobility
В большей степени это организационный момент, который прямым образом никак не отразится на Qt-разработчиках. Однако приведение Qt к модульному виду позволит нам независимо развивать отдельные подсистемы фреймворка.
Процесс модуляризации ещё не завершён: например, репозиторий qtbase содержит множество модулей, которые ещё только предстоит разбить на части. Так что вероятнее всего работы по разбиению на модули будут идти и после выхода Qt 5.0. Кроме того, модуляризация Qt сильно упрощает приём в состав Qt сторонних модулей.
Qt 5 также отвечает различным специфическим для мобильных устройств требованиям, например, поддержку геолокации и работу с различными датчиками. Так, в Qt 5 будут интегрированы Qt Mobility API. Часть этих API будет входить в состав группы основных модулей Qt Essentials. Предлагая подход с модульной структурой, другие модули могут быть добавлены без особых усилий, и уже сейчас мы уверены, что список возможностей в Qt 5 богаче, чем в любой другой версии Qt.
- Выделение в отдельную библиотеку всех связанных с QWidget возможностей
Выделяя QWidgets в отдельный репозиторий, мы одновременно заботимся о тех, кто хочет продолжать использовать его возможности, и движемся в сторону модели, в которой все интерфейсы разрабатываются с помощью QML и Qt Quick. Отделение связанных с QWidget функций в свою собственную библиотеку — это хорошая мера достижения архитектурной чистоты Qt 5 в долгосрочной перспективе.
Новые возможности
Qt 5 помимо архитектурных изменений предлагает целый ряд новых возможностей. Весь их список можно найти на специальной странице сообщества Qt Project, а здесь мы перечислим лишь основные из них.
Qt Core
- Появление класса QStandardPaths для определения стандартного расположения медиа-файлов и документов на каждой из поддерживаемых платформ.
- Включение парсера JSON и оптимизированного бинарного представления для данных JSON.
- Добавление поддержки определения MIME-типов как по расширению файла, так и по его контенту.
- Добавление нового синтаксиса соединения сигналов и слотов, проверяющегося на стадии компиляции. Включены PCRE.
- Редактирование и оптимизация многих структур данных для увеличения производительности.
- Добавление поддержки C++11.
QtGui
Вынесение всех связанных с QtWidget возможностей в отдельную библиотеку QtWidgets. Добавление в QtGui встроенной поддержки OpenGL и появление возможности работать с корневыми окнами через класс QWindow.
Qt Networks
Добавление поддержки DNS-запросов. Удаление классов QHttp и QFtp, вынесенных в отдельный модуль. Исправление ряда небольших ошибок.
Qt Widgets
Осуществление портирования на новую архитектуру QPA с сохранением совместимости с Qt 4.x.
Qt Quick
- Оформление версии Qt Quick из Qt 4.x в виде модуля Qt Quick 1 для обеспечения обратной совместимости (в будущем этот модуль развиваться не будет).
- Выделение из QML и JS частей Qt Quick, отвечающих за графику, в отдельные модули. Появление новых JS-классов QJSEngine и QJSValue, использующих движок V8, обеспечивающий большую производительность обработки JavaScript-кода.
- Добавление ряда улучшений в движок QML, связанных с производительностью и языком.
- Включение реализации QML Scenegraph на основе OpenGL в модуль Qt Quick.
- Добавление поддержки шейдерных эффектов, частиц и многих других графических эффектов.
Qt 3D и Qt Location
Появление в Qt Essentials нескольких дополнительных модулей: в первую очередь это Qt 3D для включения трёхмерного контента и Qt Location для доступа к GPS, картам и другим локационным сервисам.
Qt WebKit
WebKit C++ API не изменился по сравнению с Qt 4.x, однако теперь в Qt WebKit используется более поздняя версия движка WebKit, обеспечивающая лучшую поддержку технологий HTML5 и CSS3.
Портирование с Qt 4.x на Qt 5
Сейчас существует проблема с бинарной совместимостью и, в меньшей степени, с совместимостью на уровне исходных кодов между Qt 4.x и Qt 5. Тем не менее, мы проделали огромную работу для лёгкого перевода существующего кода на платформу Qt 5. Например, в данный момент у нас есть Qt Creator, который может быть собран и запущен как на Qt 4.x, так и на Qt 5 без изменения исходного кода.
Qt Creator, запущенный на Qt 5 © Qt Project
Если вы хотите попробовать скомпилировать ваш собственный проект для Qt 5, вы можете найти детальные инструкции здесь.
Также стоит заметить, что сейчас нет необходимости портировать собственные приложение на Qt 5, так как Qt 4.8 всё ещё продолжает поддерживаться сообществом и такими компаниями, как Digia. Однако мы полагаем, что Qt 5 содержит достаточно преимуществ, достаточных для перехода на него в конечном счете.
Следующие шаги
С момента начала разработки Qt 5 было сделано очень многое, и вы можете нам помочь привести Qt 5.0 к законченному виду, загрузив его альфа-версию, попробовав новые возможности и сообщив нам о своих ощущениях.
Все отзывы следует направлять в рассылку development@qt-project.org (lists.qt-project.org) или просто сообщать о них в виде баг-репортов в нашем бегтрекере. Все патчи и багфиксы также приветствуются — отправляйте их на codereview.qt-project.org.
Qt 5 Alpha — это первый шаг на пути к финальному релизу Qt 5, и основные усилия сейчас будут направлены на оптимизацию кода и устранение оставшихся проблем; мы постараемся завершить разработку Qt 5.0 как можно скорее.
Ещё раз хочется сказать спасибо всем участникам сообщества Qt Project за оказанную помощь.
Автор: nokiaman