Qt (программного обеспечения)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 19:50, 9 ноября 2016.

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

Qt.png

Существуют версии Qt для UNIX-подобных операционных систем с X Window System (например, X.Org (EN), Mac OS X и ОС Windows). Также Qt Software портирует свой продукт на мобильные платформы: Embedded Linux (EN), S60 (EN) и Windows CE. Qt предоставляет большие возможности кросс-платформенной разработки самых разных программ, не обязательно с графическим интерфейсом. На нем, в частности, основана популярная среда рабочего стола KDE (EN).

Со времени своего появления в 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.

Рис. 2. Схема связывания сигналов и слотов объекта

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

  • QString str = tr("Some text")

Класс QLineEdit

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

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

Методы:

  • QString text () const - возвращает текст, содержащейся в текстовом поле.
  • QString displayText () const - возвращает текст, отображаемый текстовым полем. Отличается от метода text () тем, что в случае использования режима ввода пароля, вернет строку, содержащую символы-заменители.

Слоты:

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

Класс QTextEdit

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

Рис.5. Класс 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), т.е. нужно использовать:

 #include <QObject>
 #include <QList>
 #include <QFont>

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

T fooBar() const;
void setFooBar (T val);

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

Преимущества и недостатки Qt

Преимущества Qt

  • быстрая многоуровневая разработка;
  • кросс-платформенность;
  • использование в мобильных платформах:
    1. Symbian
    2. Harmattan
    3. Maemo
    4. Android
    5. IOs
  • кросплатформенность;
  • наличие слотов и сигналов;
  • удобное межпроцессное взаимодействие;
  • переносимость на уровне исходного кода ( Microsoft Windows, Linux, Mac OS X, QNX, Android, IOS);
  • хорошая документация.

Недостатки Qt

  • большой вес приложений;
  • низкий порог вхождения;
  • относительная сложность распространения приложений.

Примечание

  1. QT профессиональное программирование на C++ - [Электронный ресурс] : — Режим доступа: https://roman.am/files/Шлее%20М.%20-%20Профессиональное%20программирование%20на%20C++.%20Qt%204.8.(В%20подлиннике)%20-%202012.pdf
  2. Разработка графического интерфейса с по- мощью библиотеки Qt3 - [Электронный ресурс] : — Режим доступа: http://www.opennet.ru/docs/RUS/qt3_prog/index.html
  3. Программирование на C++ с использованием библиотеки Qt4- [Электронный ресурс] : — Режим доступа: http://www.proklondike.com/books/cpp/cpp_zemskov_cpp_qt4.html
  4. Mapping Many Signals to One - [Электронный ресурс] : — Режим доступа: http://doc.trolltech.com/qq/qq10-signalmapper.html.– Перевод: http://www.crossplatform.ru/node/45
  5. Документация Qt - [Электронный ресурс] : — Режим доступа: http://doc.trolltech.com/, Перевод: http://doc.crossplatform.ru/qt/]