Pull to refresh

А давайте пощупаем Qt5

Qt
Выход первой альфы Qt5 уже не за горами, но зачем нам ждать этого момента, если мы можем прямо сейчас окунуться в ближайшее будущее с его QtQuick2, V8 и qpa?

Проще всего собрать linux версию Qt, поэтому именно её мы и будем собирать.

Необходимые зависимости для сборки:



  • git — все сырцы сейчас зеркалируются на gitorious'е и поэтому без git'а по просту не получится получить исходники
  • build-essential — набор из make, gcc и сопутствующих утилит
  • xcb — для сборки x11 бэкенда обязательно необходимы заголовочные файлы и библиотеки. Обратите внимание, что Qt5 переехала на xcb вместо xlib'а!
  • wayland — для сборки wayland бэкенда
  • mesa — без поддержки openGL Qt ни собираться ни работать не будет! Нужна хотя бы программная поддержка на уровне llvmpipe.
  • время — исходников много и нужен или мощный компьютер или много времени


Получение исходников



Тут всё банально, находим удобную для этих целей директорию и командуем:
$ git clone git://gitorious.org/qt/qt5.git qt5

Сразу стоит обратить внимание на то, что команда отработает подозрительно быстро. Так и должно быть! Репозиторий активно использует субмодули, которые при клонировании не скачиваются. Теперь нужно их проинициализировать.
$ cd qt5
$ perl init-repository

И можем спокойно идти пить чай. Исходники весят очень много! И иногда бывает, что gitorious обрывает соединение, тогда перезапускаем инит к ключем force.
update:
Vass сказал, что можно не целиком репу инитить и скачивать исходники быстрее.

Хочу добавить, что если вам принципиально не важен вебкит, то лучше добавить к init-repository еще и ключ --no-webkit, таким образом вы избавите себя от длительного ожидания «когда же эта жирная зараза скачается» и от вопросов типа «почему же эта жирная зараза не собирается».


Сборка:



README рекомендует следующую команду:
$ ./configure -prefix $PWD/qtbase -opensource

Но я бы еще добавил ключ -release и -fast для того, чтобы побыстрее получить нечто, что можно пощупать.
Теперь просто командуем make с указанием количества ядер и идем по своим делам. Не советую включать флаг silent, он иногда глючит!

Давайте посмотрим, что у нас получилось:



Можно заметить, что некоторые классы из QtGui переехали в QtWidgets, при этом теперь для создания окна используется QWindow вместо QWidget'а. Больше не осталось макросов вида Q_WS_X11 или Q_WS_WIN32, зато появился макрос Q_WS_QPA. Соответственно изменился вообще подход к оконным системам, теперь они переключаются не на этапе компиляции, а на этапе запуска. Следует это помнить при портировании своих приложений на Qt5. Для переключения оконных систем можно использовать ключ -platform

Для ощупывание примеров я добавил профиль Qt5 в QtCreator:



Теперь мы можем спокойно их собирать, запускать, а также пробовать собрать свои старые проги с Qt5. Пара примеров с пылу с жару:




На вид совершенно ничего не изменилось в сравнении с Qt4, хотя внутри оно уже несколько по другому работает.

Пробуем QtQuick2 и хваленый Scene Graph


Для этих целей существует утилита qmlscene, давайте запустим с помощью неё пару примеров:



К сожалению без видео невозможно оценить всю прелесть новых возможностей, для этих целей лучше поискать видео записи на ютубе. В целом же хочу сказать, что пока QtQuick2 в Линуксе несколько странно работает, во первых не скажу, что он работает плавнее, чем QtQuick1, во вторых некоторые демки не работают или падают. С чем это связано, с сыростью видеодрайверов или самого scene graph'а пока не ясно, но на видео с rapsberry всё работает плавно. В изменения API я не вникал, но сразу заметил наличие шейдеров и canvas API. Теперь еще проще делать приложения не прибегая к C++ для этого.

Щупаем QtWayland


Чтобы собрать модуль QtWayland, нужно самостоятельно выполнить в его каталоге команду qmake и make. При этом убедившись, что мы используем qmake от Qt5. После чего собирается плагин-бэкенд для wayland'а и несколько примеров wayland-композиторов. Самым интересным из них является qml-compozitor, код которого целиком написан на qml! Выглядит он на данный момент вот так:

И падает при любом удобном случае. Внутри weston'а Qt приложения работают куда стабильнее, но тоже любят падать при попытке ресайзить окно. В общем начало интересное, но работы еще непочатый край.

Кому интересно, можете попробовать вот эту демку собрать, работает великолепно, хоть сейчас делай на основе неё редактор изображений.

Общие впечатления



Qt platform abstraction, однозначно, большой шаг вперёд для написания кроссплатформенных приложений, но к нему нужно привыкать и придется отвыкать от старого подхода с #ifdef'ами. Ну и придется смириться с тем, что определение платформы будет вестить в рантайме, а не во время компиляции, что при неправильном проектировании приложения будет приводить к потерям производительности.
Разделение на модули стало гораздо более логичным. Теперь нет отдельного проекта QtMobility, все его наработки находятся в master ветке. И для написания Qt Quick приложений теперь не нужно тянуть весьма толстую библиотеку с виджетами.
Qt Scene Graph пока ещё весьма сырой и с ним нужно быть внимательнее и осторожнее.
Qt Wayland ещё очень сырой, но демонстрирует нам интересные идеи по написанию композиторов. Вполне вероятно, что на его основе ещё появятся классные проекты.
Процесс портирования приложений на Qt5, в основном, сводится к простой переборке pro файлов и добавлению туда модуля widgets и в фиксе инклудов. Ужасов переезда уровня Qt3 > Qt4 нет!
Tags:qt5qmllighthouseqpa
Hubs: Qt
Total votes 45: ↑43 and ↓2+41
Views22K
Comments Comments 67

Popular right now

Top of the last 24 hours