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

После суток жизни поста я начал замечать утечку кармы, так что заранее прошу прощение за возможно недопустимый стиль изложения в статье и субъективизм
Последнее время я не мог не обратить внимание на популярность темы 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()
Стоит сказать, что у Qt также есть модули для удобной работы с XML, базами данных (с интеграцией вкусной-превкусной кьютешной системой MVC), OpenGL, аудио/видео-работы (Phonon), сетевого программирования, WebKit2. Для больниства задач, которые стоят перед среднестатистическим проектом — этой кухни хватает в 90% случаев, а с модулями редко случаются з*ебы.
С учетом моей любви к C++, я очень и очень сильно доволен тем, какую поддержку различных нетривиальных вещей Qt представляет на кросс-платформенном уровне. Пару раз приходилось разруливать особо непонятные моменты, но это такое.
Вешч №2. Qt Quick
Qt Quick — это мегасмачный подход к созданию графического пользовательского интерфейса. Используя декларативный язык QML (угадайте, где его придумали, лол), похожий на JavaScript, можно добиться высокой производительности при прототипировании интерфейса в приложениях любой сложности. А самое забавное, что при таком ходе дел, с прототипированием интерфейса может справиться даже дизайнер, который знает синтаксис JavaScript. Это все были бы пустые слова, если бы я не показал вам пример функционального кода (больше можно найти на Qt Project — тамц).

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 лет. Представляю, насколько круто на своих глазах видеть рост такого проекта и быть в эпицентре всей разработки — просто смачненько.

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

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

^ классненький Qt Creator, в котором можно творить чудеса и тебе за это ничего не будет.
К сожалению, у меня нету строгих чисел, но говорят, что код каждый день оптимизируется, а codebase тщательно наращивается — добавляются новые фичи и исправляются старые баги (в этом то я успел убедиться уже много раз). Все это очень годно и не может не радовать.
К тому же, сейчас идет активное развитие платформ iOS, Android, Windows Phone, уже сейчас можно собирать под них программы!
Итог
Я думаю вы понимаете, что Qt — это правда круто и после прочтения статьи вы полюбили его так же, как и я.
Спасибо за внимание!
Ваш, namespace.
Qt это что в программировании
26 сентября 2023
Скопировано
Qt — это библиотека классов C++ и набор инструментального программного обеспечения для создания кросс-платформенных приложений с графическим интерфейсом (GUI). Существуют вариации для других языков: PyQt для Python, QtRuby для Ruby, Qt Jambi для Java.

«IT-специалист с нуля» наш лучший курс для старта в IT
Кто пользуется Qt
- Разработчики на C++, которые создают десктопные и мобильные приложения.
- Разработчики ПО для интернета вещей или для микрокомпьютеров.
- Специалисты в области специализированного оборудования: embedded-систем, промышленных роботов и другой сложной автоматики.
Профессия / 8 месяцев
IT-специалист с нуля
Попробуйте 9 профессий за 2 месяца и выберите подходящую вам

Сферы применения
В основном Qt используют для создания очень быстрых и высокопроизводительных приложений. Это мессенджеры, игры или сложные ресурсоемкие программы. Он популярен в сферах, имеющих повышенные требования к безопасности ПО. Среди них:
- промышленность и транспортная отрасль. На C++ и на Qt пишут программы для роботов, которые используются на производствах, в перевозке грузов и других похожих отраслях. Qt используют при написании программного обеспечения для автомобилей, кораблей и других видов транспорта;
- MedTech. Фреймворк применяют при создании программных систем и интерфейсов для медицинского оборудования;
- IoT. На C++ с Qt пишут логику для «умных» приборов, которые подключаются к интернету вещей.
С использованием Qt написаны мессенджер Telegram, продукты Autodesk, окружение рабочего стола для многих систем под ядром Linux и пр.
Модули Qt
Тут перечислена часть основных модулей — блоков программного кода библиотеки Qt. В них содержатся классы и функции для создания приложений и работы с данными.
- QtCore — ядро фреймворка.
- QtGUI — компоненты для создания интерфейсов.
- QtNetwork — функции для работы с сетевыми соединениями.
- QtSql — компоненты для работы с базами данных на основе SQL.
- QtWidgets — модуль для работы с виджетами.
- QtXml — компоненты для обработки XML, специального формата хранения файлов.
- QtXmlPatterns — инструменты для работы с языками, которые обрабатывают данные XML и организуют к нему доступ.
- QtScript — классы внутреннего скриптового языка Qt Scripts.
- QtOpenGL — инструменты для работы с библиотеками, написанными по спецификации OpenGL.
- QtSvg — компоненты для обработки векторной графики.
- QtMultimedia — инструменты для работы с мультимедиа-файлами.
- QtWebEngine — ядро браузера Chromium, адаптированное под Qt.
- QtTest — компоненты для тестирования приложений.
- Qt3Support — поддержка старых версий фреймворка.
- QtCLucene — инструменты для автоматического поиска.
Что входит в Qt
Кроме библиотеки и ее модулей, Qt содержит дополнительное ПО, утилиты, справочники и внутренние языки.
Qt Creator. Это IDE, среда программирования. Внутри Qt Creator можно писать, компилировать и запускать код, тестировать его и выполнять отладку. Среда работает в Windows, Linux и macOS.
Qt Assistant. Большой справочник и библиотека документации. Он добавляет в среду возможность открывать и читать документы, сохраненные в QCH — внутреннем формате Qt для справочных документов. Ассистент позволяет быстро разобраться в работе нужного модуля.
QT Linguist. Инструмент помогает быстрее локализовать приложение на разных языках. Используется при создании программ, которые рассчитаны на мультиязычную аудиторию.
Qt Designer. Инструмент позволяет быстро создавать графические интерфейсы (GUI). Он поставляется вместе с фреймворком и подходит для разработки приложений, где большую роль играют визуальные компоненты. Интерфейс создается внутри инструмента с помощью C++, сохраняется в файл и подключается к проекту, написанному на Qt.
Qt Quick. Еще один инструмент для интерфейсов. Он отличается от предыдущего: GUI создается не на C++, а с использованием специального языка QML. Отличается и стиль описания компонентов. Qt Quick предназначен для быстрого и простого создания интерфейсов. Его часто применяют при разработке мобильных приложений и игр.
QML. Это язык для создания интерфейсов от команды Qt. Он основан на среде JavaScript и помогает быстро описывать графические интерфейсы. В Qt реализована полная поддержка QML, а сам язык встроен в инструмент Qt Quick.

Курс для новичков «IT-специалист
с нуля» – разберемся, какая профессия вам подходит, и поможем вам ее освоить
Метаобъектная система в Qt
Так называется часть ядра, которая отвечает за взаимодействие процессов и объектов между собой. В Qt это взаимодействие построено на системе слотов и сигналов.

- Каждый компонент может посылать сигнал об изменении состояния.
- У других компонентов есть специальные функции-слоты, которые принимают сигналы и в зависимости от них совершают либо не совершают действие.
Это реализация идеи «Наблюдатель и наблюдаемое», позволяющая не повторять одинаковый код. Чтобы внедрить эту систему в C++, нужна метаобъектная компиляция. Она дополняет возможности «чистого» языка. Так объекты способны хранить больше информации, поэтому им можно добавить сигналы и слоты.
Такое взаимодействие нужно при построении графических интерфейсов. Например, программа должна реагировать на определенные действия пользователя. Также система необходима при асинхронном или многопоточном программировании.
Преимущества Qt
Кросс-платформенность. Qt — кросс-платформенный фреймворк. Это значит, что он существует для всех популярных операционных систем: Windows, Linux, iOS и Android. Фреймворк используют при разработке под любые устройства: от микроконтроллеров до суперкомпьютеров.
Высокая скорость. Программы на C++ быстро обрабатываются и запускаются. Также C++ — компилируемый язык программирования. Это значит, что компилятор транслирует исходный код на C++ в исполняемый файл, который содержит набор машинных инструкций, что тоже влияет на скорость.
Удобная среда разработки. Qt Creator — среда, в которой легко разобраться. В ней есть все необходимое, важные компоненты находятся под рукой, а сам инструмент интуитивно понятен. В нем удобно организована отладка, поэтому разработчику легче находить проблемные участки кода.
Быстрое создание GUI. Дополнительные инструменты помогают быстро спроектировать интерфейс и разработать дизайн. Благодаря Qt Creator и его возможностям фреймворк отлично подходит для создания приложений с упором на графический интерфейс.
Взаимодействие процессов. Благодаря метаобъектной системе Qt может более гибко управлять межпроцессным взаимодействием, чем «чистый» C++. Сейчас это преимущество не так актуально, потому что появились версии C++ 11 и выше. Но много проектов пользуется легаси-кодом, написанным на старых версиях языка. Там особенности взаимодействия все так же важны.
Документация. На официальном сайте представлена подробная документация, которая поможет разобраться с особенностями работы с Qt.
Недостатки Qt
Сложности с лицензией. У Qt тройное лицензирование. Существуют три варианта библиотеки, каждый из них — под своей лицензией. Один предназначен для коммерческой разработки, второй — для проектов с открытым исходным кодом, третий — для собственнических проектов. Для коммерческих проектов нельзя использовать бесплатную версию.
Большой вес приложений. Qt добавляет много новых сущностей, все они занимают место. Итоговый проект быстро работает, но много весит. Для десктопных приложений это не так критично, как для мобильных.
Обратная совместимость. Из-за обратной совместимости со старыми версиями разработчики поддерживают в том числе неоптимальные решения.
Сложность. C++ — сложный язык. В нем много абстракций, он не интуитивно понятный. Новичкам бывает трудно в нем разобраться.
Распространенность. В основном C++ используется только там, где нужна высокая скорость работы. Это программное обеспечение для сложных промышленных систем, медицинской техники, автомобилей, роботов. Для пользовательских приложений язык применяется реже, чем раньше. Поэтому Qt встречается не так часто, как другие фреймворки.
Как начать работу с Qt
Бесплатную версию фреймворка можно скачать на официальном сайте. Небольшая программа-инсталлятор Qt Installer подгрузит и установит необходимые компоненты. Можно воспользоваться бесплатной версией либо приобрести лицензию. Она подходит для крупных коммерческих проектов. Для тестирования инструмента достаточно триальной версии (полная версия Qt со сроком действия 10 дней).
IT-специалист с нуля
Наш лучший курс для старта в IT. За 2 месяца вы пробуете себя в девяти разных профессиях: мобильной и веб-разработке, тестировании, аналитике и даже Data Science — выберите подходящую и сразу освойте ее.

Статьи по теме:
Уроки QT Creator

Изучение Qt Creator | Урок #1 - Графический интерфейс на С++
Представляем курс по изучению платформы Qt Creator. За курс вы научитесь работать с программой Qt, изучите встроенные функции и интерфейс программы. На основе полученных знаний вы создадите несколько программ с графическим интерфейсом на языке программирования C++.
Видеоурок
Полезные ссылки:
Информация про Qt
Qt (кьюти) - это специальный фреймворк, который позволяет создавать приложения с графическим дизайном, базами данных и мощным функционалом. Написание таких программ в основном осуществляется на C++ , но также можно использовать другие языки программирование: PHP , Java , Python , Ruby и другие.
В ходе данного видео курса мы будем создавать приложения используя язык C++ , поэтому перед началом курса стоит ознакомиться с этим языком.
Платформа Qt C++ очень популярна, так как позволяет быстро и удобно создавать полноценное программное обеспечение, запуск и работа которого будет возможна практически на всех операционных системах: Mac, Windows, Linux и другие.
В Qt присутствует множество компонентов, которые позволяют писать код, создавать графический интерфейс, работать с дополнительными C++ библиотеками, подключаться к базе данных, а также компилировать и запускать приложения не выходя из самой программы.
Фреймворк Qt был использован во множестве популярных программ компаний, таких как: Skype, Телеграмм, проекты от Google, Panasonic Windows программа и многие другие.
План курса
В ходе видео курса мы научимся работать с программой Qt, изучим различные компоненты этой программы, научимся создавать простые приложения, а также создадим полноценное приложение с графическим интерфейсом и функционалом.
К концу курса у вас будет достаточно знаний для разработки своих программ на основе платформы Qt.
Перед курсом обязательно просмотрите курс по языку C++, так как многие моменты будут реализованы лишь за счёт C++ концепций. Просмотреть курс можно по этой ссылке .
Задание к уроку
Что такое Qt?
Расскажите что такое Qt и для каких целей он используется? Можно ли на нём создавать не только графическую оболочку, но и функции программы?
На каких языках программирования можно создавать приложения в Qt?
Посмотреть ответ
Qt это фреймворк, который позволяет создавать программное обеспечение для различных операционных систем. На основе этой программы вы можете создавать как дизайн приложения, так и весь его функционал.
Для написания кода вы можете использовать язык C++ или же другой язык, к примеру: PHP , Java , Python , Ruby .
Большое задание по курсу
Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца
Qt это что в программировании
Раздел "Библиотека QT" основывается на материале, изложенном в следующих источниках:
- Электронное пособие Ю.В. Земсков - Программирование на C++ с использованием библиотеки Qt4
- Саммерфилд М. Qt. Профессиональное программирование. Разработка кроссплатформенных приложений на С++
- Макс Шлее. Qt 4.8. Профессиональное программирование на C++
- Ж. Бланшет, М. Саммерфилд. Qt 4: Программирование GUI на C++
Сегодня практически невозможно представить себе приложение, не обладающее интерфейсом пользователя. Понятия Software и GUI ( Graphical User Interface ) неразрывно связаны друг с другом. Библиотеки для создания пользовательского интерфейса применяются во многих операционных системах, начиная с Motif для ОС UNIX и заканчивая широко известной MFC ( Microsoft Foundation Classes ) от Microsoft для ОС Windows .
Хотя Windows API ( Application Programming Interface , интерфейс программирования приложений) обладает всем необходимым для создания графического интерфейса пользователя, использование этих доступных "инструментов" требует больших затрат времени и практического опыта. Но самый большой недостаток, связанный с применением этих библиотек — это платформозависимость.
Qt представляет собой мощную библиотеку разработки кроссплатформенных приложений – настольных, сетевых и для мобильных устройств. На всех платформах библиотека Qt использует свой собственный набор визуальных элементов, в результате приложения, созданные на её основе, во всех системах выглядят и работают одинаково (исключение составляют декоративные элементы главного окна приложения и некоторые стандартные диалоги, которые реализуются не самой библиотекой Qt , а с помощью API текущей платформы).
Библиотека Qt является безусловным лидером среди имеющихся средств разработки межплатформенных программ на языке C++. ОС Linux , благодаря распространению графической оболочки KDE, стала поумолчанию стандартом проектирования программного обеспечения на этой платформе.
Для разработчиков Windows-приложений библиотека Qt долгое время не выходила на передний план, поскольку для Windows существовали более доступные и удобные средства быстрой разработки программ ( Microsoft и Borland/Inprise ). Все изменилось, когда:
- 4-я версия Qt по своим возможностям стала сравнима с программными продуктами для разработки приложений фирм Microsoft и Borland/Inprise ;
- самой Borland пришлось обратиться к Qt , когда встал вопрос о разработке межплатформенных программ;
- версия Qt для Windows , наконец-то, стала свободной, а не только коммерческой.
Qt — это не только средство для создания интерфейса пользователя, это полный инструментарий для программирования. Этот инструментарий состоит из отдельных модулей и предоставляет:
- поддержку двух- и трехмерной графики (фактически, являясь стандартом для платформонезависимого программирования на OpenGL );
- использование формата XML ( eXtensible Markup Language );
- STL -совместимую библиотеку контейнеров;
- поддержку стандартных протоколов ввода-вывода;
- классы для работы с сетью;
- поддержку программирования баз данных, включая поддержку Oracle , Microsoft SQL Server , IBM DB2 , MySQL , SQLite , Sybase , PostgreSQL ;
- и многое другое.
Qt — полностью объектно-ориентированная библиотека. Новая концепция ведения межобъектных коммуникаций, именуемая "сигналы и слоты", полностью заменяет былую, не вполне надежную модель обратных вызовов. Также имеется возможность обработки событий, например, нажатия клавиш клавиатуры, перемещения мыши и т. д.
Предоставляемая система расширений ( plug-ins ) позволяет создавать модули, расширяющие функциональные возможности ваших приложений. Эти расширения пользователи вашей программы могут получать не только от вас, но и от других разработчиков. Несмотря на то, что библиотека Qt изначально создавалась для языка программирования C++ , это вовсе не означает, что ее использование невозможно в других языках. Напротив, во многих языках программирования существуют модули для работы с этой библиотекой, например Qt Jambi в Java , Qt# в C# , PerlQt в Perl , PyQt в Python , PHP и т. д.
Программы, реализованные с помощью Qt , могут использовать язык сценариев Qt Script . Эта технология позволяет пользователям вашего приложения расширить возможности без изменения исходного кода и без перекомпоновки самого приложения, изменить "поведение" приложения.
Qt прекрасно документированна, благодаря чему вы всегда можете почерпнуть любую интересующую вас информацию об этой библиотеке, используя программу Qt Asisstant . А если и этого окажется недостаточно, то не забывайте, что Qt — это библиотека с открытым исходным кодом ( Open Source ), и вы всегда можете взглянуть и детально разобраться в том, как работает та или иная часть этой библиотеки.