Почему я люблю Qt и вы все тоже должны его любить

7c1c7a7f6be6798d78be908d409003b6.pngПривет, Хабрахабр! Последнее время я не мог не обратить внимание на популярность темы Qt на хабрике, но тем не менее, в комментах продалжают встречаться люди, которые говорят откровенно лживые и непонятные вещи. Этим постом я хотел развеять малость заблуждений о Qt и рассказать, почему же ты должен пересесть со своих Java/Obj-C/.NET на мягкий и пушистый Qt.

Под катом будет много впечатлений, субъективностей и моих скромных мнений на счет самого замечательного фреймворка для разработки приложений. Впрочем, я постараюсь добавить интересностей, чтобы моя статья приобрела хоть какой-то техническополезный смысл. Надеюсь, получится занимательное чтиво и вам понравится.

Ну, что. Поехали?

Вешч №1. С++ API Ни для никого не секрет, что у Qt очень удобное API, а конкретнее говоря, модуль qtbase содержит достаточное количество классов для большинства повседневных задач (Qt — это больше, чем GUI фреймворк, лол). Я уже говорил об обертках STL-ных контейнеров в своей статье трехгодичной давности — тыцк. Классы для работы со строками, отладочный вывод, и много-много чего, так же included. QString fruits = «apple, banana, orange, banana»; QStringList fruitsList = fruits.split (»,»); qDebug () << fruitsList; // выведет в консоль [ "apple", "banana", "orange", "banana" ] fruitsList.removeDuplicates(); fruits = fruitsList.join(", "); qDebug() << fruits; // выведет в консоль "apple, banana, orange" Стоит сказать, что у Qt также есть модули для удобной работы с XML, базами данных (с интеграцией вкусной-превкусной кьютешной системой MVC), OpenGL, аудио/видео-работы (Phonon), сетевого программирования, WebKit2. Для больниства задач, которые стоят перед среднестатистическим проектом — этой кухни хватает в 90% случаев, а с модулями редко случаются з*ебы.С учетом моей любви к C++, я очень и очень сильно доволен тем, какую поддержку различных нетривиальных вещей Qt представляет на кросс-платформенном уровне. Пару раз приходилось разруливать особо непонятные моменты, но это такое.

Вешч №2. Qt Quick Qt Quick — это мегасмачный подход к созданию графического пользовательского интерфейса. Используя декларативный язык QML (угадайте, где его придумали, лол), похожий на JavaScript, можно добиться высокой производительности при прототипировании интерфейса в приложениях любой сложности. А самое забавное, что при таком ходе дел, с прототипированием интерфейса может справиться даже дизайнер, который знает синтаксис JavaScript. Это все были бы пустые слова, если бы я не показал вам пример функционального кода (больше можно найти на Qt Project — тамц).image

import QtQuick 2.0

Rectangle { id: page width: 320; height: 480 color: «lightgray»

Text { id: helloText text: «Hello world!» y: 30 anchors.horizontalCenter: page.horizontalCenter font.pointSize: 24; font.bold: true }

Grid { id: colorPicker x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4 rows: 2; columns: 3; spacing: 3

Cell { cellColor: «red»; onClicked: helloText.color = cellColor } Cell { cellColor: «green»; onClicked: helloText.color = cellColor } Cell { cellColor: «blue»; onClicked: helloText.color = cellColor } Cell { cellColor: «yellow»; onClicked: helloText.color = cellColor } Cell { cellColor: «steelblue»; onClicked: helloText.color = cellColor } Cell { cellColor: «black»; onClicked: helloText.color = cellColor } } } Имплементация объекта Cell крайне тривиальна и определена таким образом import QtQuick 2.0

Item { id: container property alias cellColor: rectangle.color signal clicked (color cellColor)

width: 40; height: 25

Rectangle { id: rectangle border.color: «white» anchors.fill: parent }

MouseArea { anchors.fill: parent onClicked: container.clicked (container.cellColor) } } В этом коде нету ни строчки С++ и он нормально работает. Годно, не так ли? Я себя даже волшебником от этого почуствовал — проще в магазин за хлебом сходить, чем приложение вот такое склепать. Тем не менее, в сложных приложениях не хватает одного QML и мы объединяем его с С++. Об этом шла речь в многих статьях хаба Qt Software — например, тамц.

Вешч №3. Сообщество Ну вот мы и дошли до приятного момента. Если говорить о мне, то я работаю с Qt относительно мало — всего 5 лет. Qt проводит ежегодные мероприятия — Qt Developer Days и Qt Contributors' Summit. Я был на каждом из них по одному разу, в прошлом году, и мне очень понравилось — уровень подготовки высокий, а впечателения доставляют. Мне также приходилось общаться с «ветеранами» Qt — людьми, которые посещали саммит на протяжении 10 лет. Представляю, насколько круто на своих глазах видеть рост такого проекта и быть в эпицентре всей разработки — просто смачненько.302459dae0534a7093d6798a0504275e.jpg

К новичкам эти люди очень терпимы и относятся хорошо, мне было очень легко и прятно навести контакты с такими замечательными людьми. На Qt Project есть форумы, где каждый желающий может получить ответ на волнующий его вопрос. Забавно, но девнет действительно очень живой и там реально отвечают на вопросы, возникающие, в процессе познания Qt.

Вешч №4. Открытый исходный код и code review Сорец кьюта открыто разрабатывается в основном, компаниями Digia (комм. поддержка +), KDAB, ICS и энтузиастами-разработчиками. Хостится все это дело на Gitorious — тадамц. Чтобы внести свою лепту в развитие проекта, нужно пройти строгую проверку кода — автоматизированную (соблюдения стиля кода, о котором я уже писал ранее — птссс) и человеческую — твой код будут смотреть бородатые дяди, которые не доверяют тебе и будут искать в твоем коде бэкдоры. Все это достаточно сложный процесс (заморочки с Git / ревизии на Review Board) и я наверное напишу об этом статью на днях.9844472952134dffaad49a4d6d4b815f.png

У меня, к слову, есть пару коммитов в дереве qtbase, так что можете спрашивать в лс — попробую ответить на вопросы.

Вешч №5. Динамика развития проекта Qt разрабатывается уже много лет, с конца 90-х. За это время его коммерческой версией уже успели наиграться такие компании, как Trolltech и Nokia, а сейчас этим занимается Digia. Но одно можно точно сказать, проект живет и процветает. Еще несколько лет дизайн все писали на виджетах (С++ классы, все до единого основанные на QWidget), а сегодня его может сделать и маленький ребенок. Думаю, не стоит говорить, что параллельно с ним активно развивается мошнейшая вешч — Qt Creator, который сегодня радует не только Qt программистов! 244fcff2804d43cca7a2d98fbea67d8e.png

^ классненький Qt Creator, в котором можно творить чудеса и тебе за это ничего не будет.

К сожалению, у меня нету строгих чисел, но говорят, что код каждый день оптимизируется, а codebase тщательно наращивается — добавляются новые фичи и исправляются старые баги (в этом то я успел убедиться уже много раз). Все это очень годно и не может не радовать.

К тому же, сейчас идет активное развитие платформ iOS, Android, Windows Phone, уже сейчас можно собирать под них программы!

Итог Я думаю вы понимаете, что Qt — это правда круто и после прочтения статьи вы полюбили его так же, как и я.Спасибо за внимание! Ваш, namespace.

© Habrahabr.ru