Фреймворк qt что это

Обновлено: 06.07.2024

На этом уроке мы познакомимся с кроссплатформенным фреймворком Qt и установим IDE для работы с ним.

Введение в Qt

Qt является кроссплатформенным (не зависящим от платформы/ОС) фреймворком для разработки приложений на языке С++. С помощью Qt были разработаны такие известные приложения, как: KDE, Opera, Google Earth и Skype. Впервые Qt был опубликован в мае 1995 года.

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

Изначально Qt был разработан норвежской компанией по разработке программного обеспечения Trolltech. В 2008 году компанию приобрела Nokia. Спустя четыре года в августе 2012 программные технологии Qt выкупила финская компания-разработчик Digia. Сейчас Qt развивается компанией QT Company, которая является дочерней компанией Digia, и как проект Qt под открытым исходным кодом с участием отдельных разработчиков и фирм.

Установка Qt Creator в Linux

Шаг №1: Мы будем устанавливать IDE с открытым исходным кодом. Для этого переходим по ссылке и выбираем самую свежую версию (на момент написания данной статьи — это Qt 5.13):



После окончания загрузки переходим в папку с необходимым нам файлом, нажимаем на него правой кнопкой мыши и выбираем "Свойства" . На вкладке "Основные" видим "Имя" , "Тип" , "Размер файла" , а также наименование родительской папки:


Переходим на вкладку "Права" и ставим галочку возле пункта "Разрешить выполнение файла как программы" :


Закрываем "Свойства" и запускаем программу.

Шаг №2: На следующем этапе установщик сообщает, что нам предоставлена версия с открытым исходным кодом Qt 5.13.0. Дальнейшая установка Qt предполагает регистрацию в Qt и создание Qt Account, который предоставляет доступ ко всем возможностям Qt. Кроме того, данное действие необходимо для проверки лицензии (коммерческая/некоммерческая). Если у вас уже есть учетная запись в Qt Account, то используйте кнопку "Next" .

Если учетной записи в Qt Account у вас еще нет, то её можно создать сейчас: для этого перейдите по соответствующей ссылке в установщике, и вы будете перенаправлены на сайт qt.io в соответствующий раздел, или просто используйте кнопку "Next" — вы сможете это сделать на следующем шаге:


Шаг №3: Здесь необходимо ввести логин и пароль от Qt Account или создать Qt Account, если его у вас еще нет. Кнопка "Next" переводит нас на следующий этап:



Шаг №4: Выбираем каталог для установки Qt 5.13.0. Обратите внимание, адрес каталога указывается латинскими буквами (без кириллицы) и без пробелов! После того, как выбрали каталог, нажимаем "Далее >" :


Шаг №5: Выбираем компоненты, которые хотим установить. Если на данном этапе у вас нет уверенности в выборе конкретных компонентов, то добавление и удаление можно будет сделать позже, после установки программы:


Шаг №6: Принимаем лицензионное соглашение:


И нажимаем на кнопку "Установить" :


Для завершения установки нажимаем "Завершить" . После завершения установки Qt Creator запустится самостоятельно (для этого необходимо поставить галочку возле пункта "Launch Qt Creator" ):


Вот примерно следующее вы должны увидеть при запуске Qt Creator:


Поздравляем! Qt Creator установлен.

Установка Qt Creator через командную строку в Linux

Еще одним альтернативным и простым способом установки Qt Creator в Linux на основе Debian является установка из пакетов. Если при работе с Linux вы используете терминал, то перед скачиванием и установкой Qt Creator программа запросит пароль пользователя root (команда sudo без дополнительных опций). Только после этого начнется скачивание и извлечение файлов. Обычно, пакеты Linux не содержат последней версии Qt и их необходимо обновить. Ниже приведен алгоритм действий, позволяющий за 4 шага установить Qt Creator через терминал в Linux.

Шаг №1: Обновление набора утилит для установки, удаления, обновления, поиска пакетов в Linux.

$ sudo apt update

Шаг №2: Скачивание и установка Qt.

$ sudo apt install qt5-default

Шаг №3: Установка Qt Creator.

$ sudo apt install qtcreator

Шаг №4: Установка тестовых программ.

$ sudo apt install qtbase5-examples qtdeclarative5-examples

Установка Qt Creator в Windows

Сначала нам нужно скачать установочный пакет Qt. Вы можете это сделать, обратившись к оф. сайту qt.io. Либо же воспользоваться альтернативным вариантом и скачать с какого-нибудь «зеркала» (например, c этого, полный список всех «зеркал» находится здесь):


Нажимаем на official_releases/ и переходим к online_installers/ :


Нажимаем на online_installers/ и скачиваем файл qt-unified-windows-x86-online.exe :


Запустив скачанный файл, видим перед собой приветствие «Qt Online Installer». Нажимаем "Next" :


Далее у нас спросят о наличии Qt Account. Можно смело нажимать "Skip" и двигаться дальше:


Затем снова "Далее" :


Теперь нам нужно указать путь установки Qt. Для простоты я выбрал C:\Qt :


На следующем шаге нам нужно выбрать набор компиляторов, которыми мы будем пользоваться на данных уроках. Я предлагаю ограничиться выбором пакета MinGW 7.3.0 32-bit , а остальные метки поставить так, как указано на скриншоте ниже:


После того, как инсталлятор скачает и установит все необходимые компоненты, можно будет перейти к непосредственному написанию кода для нашего приложения.

Создание проекта

Вначале нам необходимо создать проект. Сразу скажу, что наша программа будет консольным приложением. Для этого выберите "Файл" > "Создать файл или проект…" или можно воспользоваться сочетанием клавиш Ctrl+N :


Перед вами появится «Мастер настройки проектов». В левой колонке отметьте пункт "Приложение" , а затем в правой — "Консольное приложение Qt" :


На следующем шаге нужно будет указать имя для нашей будущей программы и папку, где будут располагаться файлы проекта. У меня это My_QtApplication и C:\dev\Qt_Project соответственно:


На следующем шаге без изменений, поэтому просто нажимаем кнопку "Далее" :


Теперь нам нужно выбрать набор компиляторов, который мы будем использовать для сборки нашего проекта. Я настоятельно рекомендую выбрать Desktop Qt 5.13.0 MinGW 32-bit (сняв при этом отметки с остальных, если они у вас есть):


На последнем шаге нажимаем "Завершить" :


Теперь вы можете увидеть автоматически сгенерированный Qt-проект консольного приложения. Давайте рассмотрим его детально:

Обзор выступления Ларса Кнолла (Lars Knoll), являющегося техническим директором Qt Company. Не ждите от этого выступления слишком многого. В квадратных скобках курсивом мои примечания.

Спасибо за возможность немного рассказать о Qt. Это C++ фреймворк. Его принципы и философия немного отличаются от тех, которые вам знакомы по стандартной библиотеке. [Вопрос к залу] Просто для информации, многие ли из вас знают Qt и использовали его раньше? Вау! Спасибо, здорово! Это фантастика! Тогда я буду рассказывать о вещах, которые вы вероятно уже знаете.

Что такое Qt?

Возможно, это самый всеобъемлющий C++ фреймворк. Но это не только фреймворк, это также разнообразные инструменты, которые помогают разрабатывать embedded-устройства, UI-технология Qt Quick, не относящаяся к C++, но интегрируемая с ним.

Две лицензии: коммерческая и LGPLv3/GPLv3. Это открытый проект.

  • Qt for Application Development (Desktop & Mobile Platforms: Android, Linux, Windows, Mac, iOS)
  • Qt for Device Creation (Embedded platforms: Android, Linux, Windows,QNX, VxWorks, Green Hills Software (IOT, интернет вещей))

Qt for Application Development

Qt модули

В основе находятся неотъемлемые библиотеки. Самая главная — Core, содержащая основные классы, I/O, работу с файлами и т.д. Библиотека GUI — основа графического интерфейса. И много других.

Qt for Device Creation

Qt embedded

Qt Creator

Кроссплатформенная среда разработки для настольных, мобильных и встраиваемых систем. Многие используют ее для программирования на чистом C++, без Qt. Поддерживает интеграцию различных инструментов (профилировщики, отладчики. ), автокомплит, VCS.

Qt Creator


Раннее обнаружение ошибок с помощью Qt Creator и CLang static analyzer

История

Перенесемся на 26 лет назад. Студенты Haarvard Nord и Eirik Chambe-Eng задумались над новым проектом. В то время они занимались разработкой GUI для системы, которая работала на Unix, Macintosh и Windows. Это было трудно. Летом 1990 они решили, что им нужна объектно-ориентированная система отображения.

В 1993 было разработано первое графическое ядро

early Qt

Эта версия называлась Quasar. Тогда не существовало пространств имен. Motif (библиотека элементов интерфейса и набор спецификаций для разработки графических интерфейсов под X Window System) имела свой префикс. Поэтому был добавлен префикс "Q", который исполнял роль пространства имен. Сейчас от той версии сохранилось многое. Остался QObject — центральная часть, реализующая механизм сигналов/слотов. А также QEvent, QFont, QPainter, QColor.

В 1994 они убедили своих жен поддержать их финансово пару лет, и основали компанию Trolltech.

Trolltech Site


Ранняя версия сайта Trolltech

Проект был еще довольно сырой. К тому же продажи ПО через интернет в те времена не пользовались популярностью, предпочитали физические носители. Соответственно денег было мало.

1996: Qt 1.0

Работал полностью без шаблонов. Поэтому было несколько специализированных списков для указателей, целых чисел и пр. Поддерживались Windows 95/NT и UNIX/X11. Версия для UNIX была с открытым кодом, так как маленькой компании нужно было как-то распространить свой продукт.

New Project: Kool Desktop Environment (KDE)

В 1997 Маттиас Эттрих (известный за свой вклад в проект KDE) решил использовать Qt для создания KDE. Вероятно это и стало причиной по которой Qt "взлетел".

first_kde

1999: Qt 2.0

Был выпущен под лицензией GPL. Появилась поддержка юникода. Проекту был предоставлен венчурный капитал. Количество сотрудников за год увеличилась с 5 до 50.

Были разработаны основные виджеты, а также слои, обеспечивающие "гибкий" интерфейс. Но людям не хотелось писать код для этого. Тогда появился Qt Designer.

qt_designer


первая версия

В это время я перешел на работу в Trolltech [И поэтому автор стал далее использовать местоимение "мы"]

2001: Qt 3

Мы заменили explicit sharing на implicit sharing для строк. У людей появилась куча проблем со строками. Тогда мы решили оставить implicit sharing, но создавать новый внутренний экземпляр, когда строка меняется (copy-on-write) [далее чуть подробнее].

Стали использовать больше шаблонов, C++98. Появился qobject_cast<> (аналог dynamic_cast для QObject, но не использующий RTTI). Открыты исходники для Mac.

2005: Qt 4

Тщательно пересмотрели шаблонные и вспомогательные классы. Перешли от хранения указателей на значения в контейнерах к хранению самих значений. Implicit sharing контейнеры стали использовать атомарный подсчет ссылок. Открыты исходники для Windows. Для Windows это было сделано в последнюю очередь, потому что нам был нужен доход и покупатели чтобы выжить.

Nokia приобретает Trolltech

Nokia была заинтересована в общем API для их платформ (S40, Symbian & Maemo/MeeGo). Были получены огромные инвестиции в Qt. Мы долгое время хотели разработать кроссплатформенное IDE, но не было средств. Руководство предлагало Eclipse, но она не очень хороша для C++. C Nokia наше желание стало возможным и был создан Qt Creator. А также Qt Quick. Еще мы стали работать над интеграцией движка WebKit. Nokia сменила лицензию с GPL на LGPL, что сделало фреймворк еще более свободным.

В 2012 мы разошлись с Nokia.

2011/2012 Qt 5

Digia приобрела Qt.

Портировать на новые платформы было трудно, поэтому добавили слой абстракции. Хорошо поработали над графическим интерфейсом, он перестал быть статичным. Например, это видно по окошку Dock Widget во время перемещения.

2016: Qt Company отделилась от Digia

Qt Company сегодня

250 сотрудников, годовой доход 32 миллиона евро. Около миллиона активных пользователей.

Qt сейчас

  • Поддержка старого кода
  • Интуитивность
  • Самодокументированность
  • API, простое для изучения и использования
  • Производительность

Сохранение простоты

C++ имеет очень крутую кривую обучения, из-за чего новичкам бывает тяжело. Вся эта сложность требуется в редких случаях. А Qt пользуются не только гуру C++. Вы редко увидите разработчика приложений возящегося с шаблонным метапрограммированием.

Реализация

[Поверхностно рассказывается про основы QObject, Сигналы/Слоты, moc, про которые написано в любом руководстве, пропустил]

Implicitly shared

Многие классы реализованы примерно так:

Это позволило нам быть более свободными при добавлении и удалении членов класса. При изменении объекта создается копия внутренних данных. Достоинства такого подхода:

  • Объекты ведут себя почти как примитивные типы
  • Простое и быстрое копирование объекта
  • Объект может быть передан по значению
  • Потокобезопасно
  • Небольшое ухудшение производительности из-за атомарного счетчика
  • Небольшое изменение семантики итерирования
  • У Range-for циклов могут быть проблемы:

[В первой строке detach действительно вызывается, но создание внутренней копии произойдет только если счетчик будет больше единицы, например:]

Заполнение недостающего в стандартной библиотеке:

  • QString с поддержкой юникода, который C++ нормально не поддерживает.
  • QLocale
  • QDate/QTime/QDateTime/QTimeZone
  • QAtomic и потоки. Реализованы до C++11
  • Работа с файловой системой, I/O, сетью
  • Графика

Qt Quick

[Самые-самые основы QML, ничего нового. Пропустил]

Будущие релизы

  • Qt 5.9 — текущий релиз (long term supported — 3 года)
  • Qt 5.9.2 — скоро
  • Qt 5.10 — скоро бета, релиз в ноябре
  • Qt 5.11 — май 2018
  • Qt 5.12 — ноябрь 2018 (возможный кандидат следующего long term supported)

Графика

Включение различных графических API в Qt Scene (OpenGL, Vulkan, Metal, Direct3D, Software Rasterization)

Плановая работа

  • Улучшение производительности
  • Распознавание речи (цифровой помощник?)
  • AR/VR
  • Инструменты IDE (рефакторинг, workflow)

C++14 & 17

Мы используем C++11 в той мере, в которой позволяет VS2013. Мы бы хотели использовать:

  • if constexpr
  • Initializers в if/switch
  • Structured bindings
  • Overaligned data

Уже используем __has_include , [[deprecated]] , [[fallthrough]] , [[nodiscard]] . Добавили QStringView.

Мог бы стать очень интересным для Qt: концепты, модули, рефлексия (может быть даже удалось бы избавиться от moc когда-нибудь в будущем).

Вопросы и ответы

Конечно мы работаем над этим, тратим много времени, выпускаем патчи, апдейты. Наш security mailing list достаточно небольшой.

Как произносится: "кьютИ" или "кьЮт" [очень мягкая "т" в обоих случаях]?

Хороший вопрос! В нашей компании и в тех которые работают с нами используется "кьЮт", хотя в США преимущественно "кьютИ". [А как у вас? Добавил голосовалку]

Программирование на Qt отличается от программирования на C++. Что вы думаете о дублировании функционала — например QVector и многого другого? Планируете объединить или что?

В идеале да, но есть проблемы. Во-первых, из-за поддержки старого кода. Во-вторых, некоторые Qt классы лучше, например QString (интерфейсные методы типа преобразования регистра, юникод). Задают много вопросов про схожие контейнеры. Я советую выбирать наиболее подходящие.

Сейчас в Qt используются сырые владеющие указатели (raw owning pointers). Не пора ли их заменить на умные? Сейчас объект с умным указателем нельзя передать в Qt, потому что у него появится родитель.

Это очень сложно. И сломается весь старый код.

От продаж коммерческой версии.

Почему бы к QObject и производным классам не добавить конструктор перемещения? С конструктором копирования это понятно [почему нет конструктора копирования].

Все сломается. Если бы мы предвидели появление семантику перемещения, то возможно не стали бы использовать текущий механизм. Сейчас его менять нереально.

Вы проводили оценку быстродействия модели copy-on-write для строк по сравнению с простым копированием?

Для коротких строк копирование быстрее. Скоро выйдет обновление, в котором будет реализован подобный механизм для коротких строк.

Если мы говорим о 3D API, типа Apple Metal, Vulkan, Direct 3D 12, то это сложно.

Отличается хорошей документацией, стабильностью, простотой освоения и написания кода.

Содержание

Библиотека Qt задумывалась и начиналась как кросс-платформенный тулкит (toolkit) для быстрой разработки графических интерфейсов (GUI) приложений на языке C++, с целью упростить жизнь программистов, пишущих на C++ кросс-платформенные, переносимые GUI-приложения, которые должны работать и в среде Windows, Symbian, и в среде Unix/Linux под X11, и на компьютерах Macintosh.

Qt предоставляет программисту не только удобный набор библиотек классов, но и определённую модель разработки приложений, определённый каркас их структуры. Следование принципам и правилам «хорошего стиля программирования на C++/Qt» существенно снижает частоту таких трудно отлавливаемых ошибок в приложениях, как утечки памяти (memory leaks), необработанные исключения, незакрытые файлы или неосвобождённые дескрипторы ресурсных объектов, чем нередко страдают программы, написанные «на голом C++» без использования библиотеки Qt.

Важным преимуществом Qt является хорошо продуманный, логичный и стройный набор классов, предоставляющий программисту очень высокий уровень абстракции. Благодаря этому программистам, использующим Qt, приходится писать значительно меньше кода, чем это имеет место при использовании, например, библиотеки классов MFC. Сам же код выглядит стройнее и проще, логичнее и понятнее, чем аналогичный по функциональности код MFC или код, написанный с использованием «родного» для X11 тулкита Xt. Его легче поддерживать и развивать.

Кроме того, даже если программисту в данный конкретный момент не нужна кроссплатформенность для его конкретного приложения (например, планируется версия только для Windows или только для Macintosh), никто не может знать, что понадобится завтра. Бизнес-планы могут поменяться, и может оказаться и нужным, и выгодным выпустить версию для другой операционной системы или другой аппаратной платформы. В случае использования Qt для этого понадобится всего лишь перекомпиляция исходного кода. В случае же использования, например, MFC или «родных» системных API понадобится много тяжёлой работы по портированию, адаптации и отладке, а то и переписыванию с нуля существующего исходного кода для другой ОС или аппаратной платформы.

Многие компании-разработчики приложений Windows используют Qt ещё по одной причине: даже если код пишется и в обозримом будущем будет писаться только для платформы Windows и тестируется только на ней, возможность откомпилировать один и тот же исходный код на одной и той же платформе Windows двумя разными компиляторами (Microsoft Visual C++ и GCC/Win32) гарантирует лучшее качество исходного кода и лучшую его совместимость со стандартом C++. Что немаловажно для кода, который планируется длительно поддерживать и развивать.

  • Скачайте и установите «Visual C++ 2005 Express Edition»
  • Скачайте и установите «MS Platform SDK»

Достаточно будет установить «Microsoft Windows Core SDK». Если вам понадобится доустановить какой-нибудь другой SDK, вы сможете это сделать в «Установка и удаление программ» «Панели управления». Нужно поставить галочку с установкой переменных окружения, иначе придется их ставить самостоятельно, либо запускать перед сборкой Qt скрипт в SetEnv.

В разделе Projects and Solutions диалогового окна Options добавьте пути в следующих секциях:

  • Executable files: C:\Program Files\Microsoft Platform SDK\Bin;
  • Include files: C:\Program Files\Microsoft Platform SDK\include;
  • Library files: C:\Program Files\Microsoft Platform SDK\lib.

Замечание: Обновить директории можно другим способом, для этого нужно изменить файл VCProjectEngine.dll.express.config размещенный в \vc\vcpackages. Убедитесь что вы удалили файл «vccomponents.dat» размещенный в «%USERPROFILE%\Local Settings\Application Data\Microsoft\VCExpress\8.0» перед перезапуском Visual C++ Express Edition.

Этот шаг нужен для того, чтобы сделать в Visual C++ Express шаблон приложений Win32.

Измените файл corewin_express.vsprops, размещённый в C:\Program Files\Microsoft Visual Studio 8\VC\VCProjectDefaults:

AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib"

(если вы установили Visual C++ 2005 Express Edition в папку C:\Program Files\Microsoft Visual Studio 8\, то файл должен находиться в папке C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\)

в следующих местах:

@set INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;%INCLUDE%

@set INCLUDE=C:\Program Files\Microsoft Platform SDK\Include;C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;%INCLUDE%

@set LIB=C:\Program Files\Microsoft Visual Studio 8\VC\LIB;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\lib;%LIB%

@set LIB=C:\Program Files\Microsoft Platform SDK\Lib;C:\Program Files\Microsoft Visual Studio 8\VC\LIB;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\lib;%LIB%

  • Скачайте Qt 4.2.2./Windows Open Source Edition и разархивируйте его в любую свободную папку (далее будем считать, что это папка C:\qt-win\).
  • Скачайте патч для Qt 4.2.2 и разархивируете его туда же.
  • Сборка (конфигурирование, компиляция и линковка)
    • Запустите «MS Visual C++ 2005 Express Edition».
    • Выберите пункт меню Tools->Visual Studio 2005 Command Prompt.
    • Наберите в командной строке cd c:\qt-win чтобы перейти в каталог с исходными текстами.
    • Наберите в командной строке installpath42.bat чтобы пропатчить исходные тексты.
    • Наберите в командной строке qconfigure msvc2005 чтобы произвести конфигурирование. На все запросы нажимайте 'y'.
    • После успешного конфигурирования, система попросит набрать nmake, так и сделайте. Процесс очень долгий.

    Qt полностью объектно-ориентированная, кросс-платформенная. Дает возможность разрабатывать платформо-независимое ПО, написанный код можно компилировать для Linux, Windows, Mac OS X и других операционных систем. Включает в себя множество классов для работы с сетью, базами данных, классы-контейнеры, а также для создания графического интерфейса и множество других(чуть ниже).

    Qt использует MOC (Meta Object Compiler) для предварительной компиляции программ. Исходный текст программы обрабатывается MOC, который ищет в классах программы макрос Q_OBJECT и переводит исходный код в мета-объектный код, после чего мета-объектный код компилируется компилятором C++. MOC расширяет функциональность фреймворка, благодаря ему добавляются такие понятия, как слоты и сигналы.

    Одно окно в разных ОС

    Одно окно в разных ОС

    Как видно на картинке, программы имеют родной внешний вид в различных операционных системах.

    Qt имеет среду разработки Qt Creator. Она включает в себя Qt Designer, с помощью которого можно создавать графический интерфейс. Визуальное создание интерфейса позволяет легко и просто создавать интерфейс, перетаскивая различные виджеты(выпадающие списки, кнопки, переключатели) на форму.

    Форма в Qt Designer

    Форма в Qt Designer

    Состав библиотеки Qt

    Имеются и другие модули.

    В данный момент Qt распрастраняется по 3-м лицензиям: Qt Commercial(собственическая), GNU GPL, GNU LGPL.

    Заключение

    В настоящее время Qt фреймворк активно развивается. Имеет интуитивно понятное API, огромную документацию с большим количеством примеров, мощнейшую среду разработки QtCreator и дополнительный инструментарий. Этот фреймворк стоит Вашего внимания.

    Для вас это может быть интересно:

    Краткий обзор кроссплатформенного фреймворка Qt : 1 комментарий

    Использую его при написании графических приложений для Linux, классная штука. Жаль литературы нет русскоязычной для последней версии.

    Добавить комментарий Отменить ответ

    Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

    Qt (произносится [ˈkjuːt] (кьют) как «cute» или неофициально Q-T (кью-ти)) - кросс-платформенный инструментарий разработчика прикладного программного обеспечения, широко используемый для создания графических интерфейсов. Он написан на C++ и предоставляет мощные расширения этого языка. Также доступны интерфейсы для других языков программирования, таких как Python (PyQt), Ruby (язык программирования) (Korundum/QtRuby) и Perl (PerlQt).

    Qt.jpg

    Со времени своего появления в 1996 году библиотека Qt легла в основу тысяч успешных проектов во всём мире. Кроме того, Qt является фундаментом популярной рабочей среды KDE, входящей в состав многих дистрибутивов Linux. [1]

    Содержание

    Структура Qt

    В состав Qt входят следующие группы классов:

    • классы, обеспечивающие разработку оконного графического интерфейса пользователя,включая все основные управляющие примитивы;
    • классы, реализующие работу с потоками, объектами синхронизации процессов/потоков;
    • классы для работы с 2-х и 3-х мерной графикой, классы реализующие поддержку некоторых графических форматов хранения;
    • реализация динамических массивов в виде шаблонов C++ (язык программирования);
    • классы для работы с XML (eXtensible Markup Language);

    Принципы работы с библиотекой

    Формы с использованием классов Qt могут создаваться вручную или с использованием специального пакета QtDesigner. При создании форм вручную программист кодирует текст программы, включая по мере необходимости вызовы объектов классов Qt. При использовании QtDesigner программист графически компонует внешний вид и связи сигналов и слотов формы, а компилятор интерфейса UIC формирует из полученного описания формы код на языке C++ (язык программирования), обеспечивающий создание этой формы.

    • Среду для разработки графического интерфейса.
    • Компилятор мета-объектов.
    • Набор классов для работы.

    Библиотека Qt является безусловным лидером среди имеющихся средств разработки межплатформенных программ на языке C++ (язык программирования). Широко известная и часто используемая в мире Linix, она, благодаря распространению графической оболочки KDE, стала де-факто стандартом проектирования программного обеспечения на этой платформе. К сожалению, для разработчиков Microsoft Windows-приложений библиотека Qt долгое время не выходила на передний план, поскольку для Microsoft Windows существовали более доступные и удобные средства быстрой разработки программ.

    Компиляция и сборка программы осуществляется компилятором C++ (язык программирования) и компоновщиком, доступными в рамках платформы, где осуществляется сборка


    Рис.1. Схема сборки приложения, реализованного вручную

    К таким средствам в частности относятся сигналы и слоты, поддержка которых для конкретного диалога также генерируется автоматически в коде отдельной программы C++ (язык программирования).

    Сигналы и слоты

    Ключевым механизмом взаимодействия объектов в Qt являются сигналы и слоты. Каждый объект, интегрированный в систему управления Qt, т.е. описанный как Q_OBJECT, может иметь типизированные слоты, обеспечивающие прием и обработку типизированных сигналов от других объектов, и собственные сигналы, прием которых могут осуществлять другие объекты. Связь между сигналами и слотами конкретных объектов устанавливается посредством функции connect.


    По правилам Qt один слот может принимать несколько сигналов, а один сигнал транслироваться на несколько слотов. Следует отметить, что механизм слотов не исключает возможности использования средств наследования и полиморфизма языка C++ (язык программирования), так что любой класс Qt может быть переопределен.

    Использование QtDesigner

    При необходимости быстрого получения результата, проведения экспериментов по размещению объектов, общей оценки интерфейса возможно использование специального редактора интерфейсов QtDesigner. QtDesigner не накладывает никаких ограничений на средства разработки, поскольку интерфейс, созданный им, в конечном счете будет преобразован компилятором uic в код программы на языке C++, обеспечивающий создание именно этого интерфейса.

    Диалоги, созданные в QtDesigner также могут подключаться в программу динамически посредством класса QFormBuilder или QWidgetFactory::create("form.ui") в Qt3.x без необходимости генерации и компиляции кода их создания на С++.


    Рис.3. Схема сборки приложения с формами, сделанными в QtDesigner

    Система документации

    Библиотека Qt снабжена системой документации QtAssistant, реализованной единообразно для всех платформ, на которых возможна разработка с использованием этой библиотеки.


    Рис.4. Справочная документация - приложение QtAssistant

    Для ОС Windows исполняемый файл системы документации имеет имя assistant.exe , по которому его можно запустить из консоли «Qt Command Prompt».

    QtAssistant предоставляет возможность навигации по разделам, по индексному указателю, а также нахождения необходимой фразы, в том числе включающей имена классов и/или методов, по контексту во всех статьях документации. Документация предоставляет несколько вариантов группировки классов и функций библиотеки, что позволяет быстро найти классы для работы, например с сигналами и слотами, с графикой, классы контейнеры и пр.

    Простейшие элементы ввода-вывода

    Класс QString

    Для работы со строками в Qt используется класс Qstring. Основной особенностью этого класса является то, что внутреннее хранение и все операции над строками проводятся в кодировке UNICODE. Класс позволяет преобразовывать текст из различных кодировок строки в формат C и обратно. Реализуется операции склейки, добавления, сравнения, вырезания подстроки и пр. [2]

    При работе со строками в Qt следует помнить, что любой текст, в котором присутствуют символы, отличные от основного латинского алфавита (с кодами более 128), следует явно преобразовывать в UNICODE одним из ниже представленных способов.

    Второй вариант основан на том, что Qt изначально ориентирована на написание многоязычных приложений, следовательно весь текст, написание которого зависит от региона использования, должен быть вынесен за пределы кода программы.

    Класс QLineEdit

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

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

    • QString text () const - возвращает текст, содержащейся в текстовом поле.
    • QString displayText () const - возвращает текст, отображаемый текстовым полем. Отличается от метода text () тем, что в случае использования режима ввода пароля, вернет строку, содержащую символы-заменители.
    • void clear () - очищает текстовое поле.
    • void setText ( const QString & ) - устанавливает текстовую строку, переданную в качестве параметра.
    • void setReadOnly ( bool ) - устанавливает запрет (true) или разрешения (false) редактирования. В случае запрета редактирования текст всё равно будет отображаться, а изменения значения возможно методом setText . [3]

    Класс QTextEdit

    Предназначен для отображения и редактирования текста, который не может быть представлен в виде одной строки. Позволяет использовать как «плоский текст», т.е. текст, не имеющий разметки, так и текст, в котором используются разные шрифты и способы начертания символов (жирный, курсив), а также возможности оформления абзацев, списков.


    • void setReadOnly ( bool ro ) - устанавливает запрет (true) или разрешения (false) редактирования.
    • QString text () const - получить текст в формате, который использован в данный момент.
    • QString toHtml () const - получить текст с разметкой в формате HTML
    • QString toPlainText () const - получить текст в «плоском» формате, т. е. текст без разметки.
    • void append ( const QString & text ) - добавить новую строку в конец текста. Строка будет содержать символ перевода строки.
    • void insertHtml ( const QString & text )
    • void insertPlainText ( const QString & text ) - вставить в позицию курсора текст, содержащийся в переменной text, с разметкой в формате HTML и без разметки, соответственно.

    Класс QLabel

    Предназначен для отображения надписей. Используется в тех случаях,когда ввод не предусмотрен, а надпись необходимо разместить в качестве сопроводительного элемента оформления формы. [4]

    • QLabel ( const QString & text, QWidget * parent = 0, Qt::WindowFlags f = 0 ) - конструктор, позволяющий создать надпись, содержащую текст text для виджета parent и флагами.
    • QString text () const - получить текст, содержащийся в надписи.
    • void setNum ( int num ) ;
    • void setNum ( double num ) ;
    • void setText ( const QString & ) - установить в качестве надписи целое число, число с двойной точностью, строку, соответственно.

    В тех случаях, когда необходимо запросить у пользователя какой-либо параметр, возможно применение стандартных диалогов ввода, реализованных на базе класса QinputDialog. Класс имеет статические методы getDouble , getInt , getItem , getText , предназначенные для получения числа двойной точности, целого числа, строки из массива на выбор пользователя, а также произвольно вводимый текст, соответственно.


    Рис.6. Типовой пример использования класса QitputDialog

    Инструменты Qt

    В состав Qt включены инструменты разработчика с графическим или консольным интерфейсом. В их числе:

    • assistant – графическое средство для просмотра гипертекстовой документации по инструментарию и библиотекам Qt.


    Рис.7. Инструмент QT assistant предназначенный для просмотра гипертекстовой документации - Class Reference
    • designer – графическое средство для создания и сборки пользовательских интерфейсов на основе компонентов Qt.
    • qmake – кросс-платформенный генератор Makefile.

    Утилита qmake используется для автоматического генерирования Makefile на различных платформах. В целом qmake ориентируется на Qt. Если вас интересуют кросс-платформенные системы сборки более широкого назначения, то можете обратиться к CMake, которая также поддерживает Qt.

    • moc – компилятор метаобъектов (обработчик расширений Qt для C++ (язык программирования)).
    • uic – компилятор пользовательских интерфейсов из файлов .ui, созданных в Qt Designer.
    • rcc – компилятор ресурсов из файлов .qrc.
    • qtconfig – графическое средство установки пользовательских настроек для приложений Qt.
    • qtdemo – запуск примеров и демонстрационных программ.


    Рис.8. Инструмент Qt предназначений для демонстрации - Drag and Drop Robot
    • qt3to4 – средство переноса проектов с Qt 3 на Qt 4.
    • linguist – средство для локализации приложений.
    • pixeltool – экранная лупа. [5]

    Стиль Qt

    В Qt используется CamelCasing: имена классов выглядят как MyClassName, а имена методов – как myMethodName. При этом имена всех классов Qt начинаются с Q, например QObject , QList или QFont .

    Большинству классов соответствуют заголовочные файлы с тем же именем (без расширения .h), т.е. нужно использовать:

    Поэтому в дальнейшем мы не будем отдельно оговаривать, где объявлен тот или иной класс. Методы для получения и установки свойств (getter и setter) именуются следующим образом: свойство fooBar можно получить при помощи метода fooBar() и установить при помощи setFooBar().

    При разработке собственных приложений на Qt стоит придерживаться этого стиля.

    Читайте также: