Программирование на языке C++ в среде Qt Creator

Знакомство с Qt. Подготовка к работе

Показывать лекцию целиком

11.1 Знакомство с Qt. Обзор истории

Кроссплатформенный инструментарий разработки Qt появился впервые в 1995 году благодаря своим разработчикам Хаарварду Норду и Айрику Чеймб- Ингу. С самого начала создавался как программный каркас, позволяющий создавать кроссплатформенные программы с графическим интерфейсом. Первая версия Qt вышла 24 сентября 1995. Программы, разработанные с Qt, работали как под управлением операционных систем семейства Microsoft Windows™ так и под управлением Unix-подобных систем.

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

В июне 1999 года вышла вторая версия — Qt 2.0. А в 2000 году состоялся выпуск версии для встраиваемых систем, который назывался Qt Embedded. Версия Qt 3.0 — 2001 год — работала в ОС семейства Windows™ и многих Unix-подобных ОС, таких как MacOS, xBSD, в различных вариантах Linux для персональных компьютеров и встраиваемых систем. Он имел 42 дополнительных класса, объём вырос до более чем 500 000 строк кода. Летом 2005 года состоялся выпуск Qt 4.0, который включал в совокупности около 500 классов и имел огромное количество существенных улучшений. Вместе с выпуском Qt 4.5 вышло и специализированная интегрированная среда разработки QtCreator.

В декабре 2012 состоялся официальный выпуск Qt5. Эта версия кроссплатформенного средства разработки совместима с Qt4. Перенос кода с Qt4 на Qt5 не требует много усилий. В то же время, Qt5 отличается рядом особенностей, улучшений и большим количеством новых возможностей.

Современное программное обеспечение достаточно сложное и должно соответствовать многим требованиям. Кроме пользовательских требований, налагаемых на удобство и возможности программного продукта, есть и другие требования, касающиеся разработки программного обеспечения. Большую роль здесь играют средства, которыми программист пользуется в процессе своей работы. Во многих случаях бывает удобно владеть инструментарием, который имеет достаточно широкую область применения и может служить для решения большого количества задач разного масштаба: от построения небольших программ для создания мощных программных пакетов. Также часто возникает вопрос о поддержке нескольких программных платформ, ведь, ориентируясь только на одну платформу, можно потерять большое количество потенциальных пользователей.

Инструментарий разработки Qt используют для создания кроссплатформенных программ. Здесь под этим утверждением мы подразумеваем программы, исходный текст которых можно скомпилировать на разных программных платформах (различные разновидности Linux, Windows, MacOS и т.д.) практически без изменений или с незначительными изменениями. Кроме того Qt используют и для разработки программ, имеющих характерный ("родной", native) для программного окружения или даже собственный стилизованный интерфейс. Всё это благодаря открытому свободному программному коду, удобному и логическому API и широким возможностям применения.

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

Наряду с традиционным для предыдущих версий Qt способом создания пользовательских интерфейсов, основанный на виджетах — визуальных элементах интерфейса (кнопки, флажки, выпадающие списки, поля ввода, слайдеры и т.д.), Qt5 ставит большой акцент на использовании технологии QtQuick. В Qt5 некоторые нововведения коснулись и синтаксиса для создания сигнально-слотовых соединений.

Программный код, зависящий от оконной системы в Qt5, был отделён и реорганизован в отдельные библиотеки расширения, что позволило упростить перенос Qt на новые платформы и адаптации для поддержки других оконных систем. Благодаря QPA (Qt Platform Abstraction) в Qt5 реализована поддержка многих платформ для мобильных устройств.

Несмотря на эти изменения и усовершенствования, большинство программного кода созданного для Qt4 совместимо с Qt5 и компилируется с новой версией почти без изменений. Почти весь материал следующих разделов и примеры подходят для изучения как Qt4, так и Qt5. Большая часть изменений в Qt5 касается разделения на модули.

11.1.1 Основные составляющие Qt

Рассмотрим основные составляющие кроссплатформенного средства разработки Qt: модули и инструменты.

На рис. 11.1 изображены основные составляющие Qt. Модули и инструменты доступны для разработки под целевые (Reference) и другие (Other) платформы. Средства Qt разделены по назначению на отдельные части — модули. Каждый из модулей выполнен в виде отдельной библиотеки. Разработчик имеет возможность выбрать модули, которые он использует в программе. Модули имеют взаимозависимости: одни модули используют возможности, которые предоставляют другие. Основу составляют основные (Essentials) модули:

(рис 11.1) Состав Qt5
  • Qt Core — основной модуль, который содержит все базовые средства Qt. На его основе построены все другие модули. Каждая программа созданная с использованием Qt, использует этот модуль;
  • Qt Network — модуль для работы с сетевыми средствами;
  • Qt Gui — модуль поддержки графического вывода на экран. В Qt4 он также содержит содержит набор виджетов для создания графического интерфейса пользователя. В Qt5 виджеты вынесены в отдельный модуль;
  • Qt Widgets — модуль, который содержит набор виджетов для создания графического интерфейса пользователя (Qt5);
  • Qt WebKit — средства работы с Веб;
  • Qt WebKit Widgets — виджеты для работы с Веб (Qt5);
  • Qt Multimedia — средства работы с мультимедийными устройствами и файлами;
  • Qt Multimedia Widgets — виджеты для работы с мультимедийными устройствами и файлами (Qt5);
  • Qt Sql — средства работы с базами данных;
  • Qt Qml — поддержка декларативной языка QML для разработки динамических визуальных интерфейсов (Qt5);
  • Qt Quick — поддержка создания динамических визуальных интерфейсов (Qt5);
  • Qt Quick Controls — использование технологии QtQuick для создания традиционного для рабочих столов графического интерфейса (Qt5);
  • Qt Quick Layouts — компоновка для элементов QtQuick (Qt5).
  • Существует также много дополнительных (Add-On) модулей. Стоит заметить, что разделение на основные и дополнительные модули характерно Qt5 в отличие от предыдущих версий. Названия некоторых модулей в Qt5 по сравнению с Qt4 были изменены, а некоторые средства были вынесены в отдельные или перенесены в другие модули. Эти изменения необходимо учитывать при переносе программ, которые были разработаны с использованием Qt4. Почти все примеры, которые мы будем рассматривать, работают как с Qt4 так и Qt5. В случаях, когда это существенно, мы будем указывать на отличия.

    Кроме модулей, в состав инструментария входят инструменты разработки, исходные тексты Qt, примеры программ и документация.

    11.2 Лицензирование Qt

    Qt распространяется по условиям трёх различных лицензий: GNU GPL v3, GNU LGPL v3 и по коммерческой лицензии компании Digia. Здесь мы лишь кратко осмотрим основные положения этих лицензий и что это означает для программ, которые используют соответственно лицензированный Qt.

    11.2.1 GPL

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

    11.2.2 LGPL

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

    11.2.3 Commercial

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

    11.3 Справка и ресурсы

    Важнейшей помощницей при разработке с использованием Qt является интегрированная справка. Документация Qt удивительно удобна в использовании и создана для быстрого поиска среди богатого инструментария Qt. Она содержит не только описания классов, входящих в состав модулей, но и краткие примеры использования методов и классов, полные тексты демонстрационных программ, освещающих возможности Qt. Также здесь можно найти несколько пошаговых инструкций для начинающих и статьи, посвящённые описанию и объяснению механизмов работы и различных аспектов использования инструментария.

    Для просмотра интегрированной справки можно воспользоваться как средой Qt Creator, так и специальной отдельной программой, которая называется Qt Assistant и является частью инструментария Qt.

    Для вызова встроенной справки вы можете воспользоваться одним из следующих способов:

  • перейдите в режим справки среды Qt Creator — Help (комбинация клавиш Ctr+6);
  • установите курсор на название класса или метода и нажмите F1 — среда выполнит поиск и откроет соответствующий раздел справки в боковой панели.
  • В режиме справки или в случае использования Qt Assistant слева от окна документации расположена панель, которая может переключаться в несколько различных режимов: Закладки (Bookmarks), Содержание (Contents), Указатель (Index) и Поиск (Search). Режим панели определяется выпадающим списком сверху. Особенно удобно пользоваться режимом Указатель (Index) при работе: как только пользователь вводит начало названия класса, метода или статьи, в справке выполняется поиск и отображение совпадений. Это особенно пригодится для быстрой навигации и поиска в справке.

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

  • не пытайтесь запомнить все названия методов, классов и т. п. Сконцентрируйтесь на осмотре возможностей, основных концепциях и практике. Используйте справку для быстрого поиска и восстановления в памяти тех или иных деталей использования инструментов Qt;
  • обратите внимание на большое количество примеров. Рассматривайте примеры параллельно с рассмотрением материала в книге;
  • попробуйте сразу же находить классы и методы из следующих глав книги в справке и исследовать их, как только вы начинаете их изучение. Для этого особенно пригодится быстрая навигация и поиска в справке.
  • В сети Интернет существует большое количество ресурсов, статей, учебных видео посвящённых Qt. Вот важнейшие из них:

  • Qt Project (http://qt-project.org/ ) — главный сайт свободного инcтрументария разработки Qt;
  • Qt Digia (http://qt.digia.com/) — официальный сайт коммерческой версии Qt;
  • Planet Qt (http://planet.qt-project.org/) — сайт, который собрал десятки блогов посвящённых Qt;
  • Qt Centre (http://www.qtcentre.org/) — форум посвящённый вопросам разработки;
  • Qt-Apps.org (http://qt-apps.org/) — сайт посвящённый открытому программному обеспечению созданному с использованием Qt.
  • 11.4 Обзор настроек среды Qt Creator

    Для разработки программ с использованием библиотеки Qt была создана интегрированная среда разработки Qt Creator. Её первая версия была представлена одновременно с официальным выпуском Qt 4.5.0. Это полноценная кроссплатформенная среда для создания новых проектов и работы с ними.

    Мы рассмотрим работу со средой Qt Creator версии 3.3.0, которая позволяет управлять целым рядом этапов разработки программы такими как: управление сеансами и проектами, редактирование и создание программного кода, конструирование пользовательского интерфейса программы, анализ быстродействия, анализ использования ресурсов, отладка, построение проекта, запуск программы.

    Одно из первых действий, которое необходимо выполнить разработчику перед началом работы с Qt Creator — это настроить среду таким образом, чтобы с ней было удобно работать. Конечно, Qt Creator имеет стандартные настройки, которые уже достаточно удобны для работы. Несмотря на это, мы хотели бы обратить ваше внимание на некоторые настройки, которые особенно полезны в работе. Среди большого количества настроек мы рассмотрим лишь наиболее важные для работы, а именно настройки компиляции и настройки редактора кода. Для доступа к диалогу настройки используем главное меню (пункт Tools- > Options..., см. рис. 11.2).

    Сначала коснёмся настроек компиляции. Для управления настройками, относящимися к построению проекта, Qt Creator использует понятие комплекта (Kit). Комплект (Kit) — это конфигурация, которую составляют версия Qt, компилятор и ещё некоторые дополнительные настройки. Таким образом, Qt Creator позволяет работать с несколькими различными версиями Qt, несколькими компиляторами в системе, выбирать и настраивать их комбинацию для построения проекта.

    Стандартным для Linux и Mac OS X является компилятор GCC. Для Windows можно воспользоваться его свободным аналогом — MinGW, или компилятором MSVC, который входит в состав Microsoft Windows SDK или Visual Studio (SDK для Windows 7 можно получить бесплатно на официальном сайте Microsoft).

    Если среда Qt Creator была установлена отдельно, то возможно необходимо будет добавить комплект самостоятельно. Для этого необходимо выполнить следующие шаги:

  • Перейдите на вкладку Compilers (Компиляторы) раздела Build and Run (Сборка и запуск) и проверьте наличие доступных компиляторов. Обычно наличие компиляторов MSVC (Windows) и GCC (Linux, MacOS) определяется автоматически. Для того, чтобы добавить компилятор MinGW, необходимо воспользоваться кнопкой Add->MinGW(Добавить->MinGW). Затем для добавленного компилятора ввести имя (поле Name) и указать полный путь к компилятору C++ — g++ (поле Compiler path);
  • Перейдите на вкладку Qt Versions (Версии Qt) и проверьте наличие доступных версий Qt. Установленную версию можно легко добавить в список воспользовавшись кнопкой Add...(Добавить). Для добавленной версии укажите имя (поле Version name) и полный путь к программе qmake (поле qmake location). Обычно данная программа содержится в папке bin в месте, куда был установлен Qt;
  • Перейдите на вкладку Kits (Комплекты). Добавьте новый комплект с помощью кнопки Add (Добавить). Выделите в списке новый комплект и задайте для него комбинацию из установленных компилятора (выпадающий список Compiler) и версии Qt (выпадающий список Qt Version). Далее задайте имя инструментария (поле Name) и сохраните изменения.
  • После выполнения этих действий, если компилятор и версия Qt, которые есть в составе инструментария, были установлены правильно, вы можете использовать комплект для построения проекта.

    (рис 11.2) Окно диалога настроек Qt Creator

    Среди настроек редактора стоит отметить настройки горячих клавиш. Qt Creator предоставляет множество комбинаций клавиш для выполнения различных действий. Приведём некоторые из них (см. табл. 11.1), которые используются чаще всего.

    Некоторые важные горячие клавиши Qt Creator
    Комбинация клавиш Описание
    Esc Выполняет переход к редактированию кода. Несколько последовательных нажатий этой клавиши переключают пользователя в режим редактирования, закрывают панели вывода справки, отладки.
    F4 Переключает редактор между файлом реализации (.сpp) и соответствующим заголовочным файлом (.h), которые содержат объявления интерфейса и реализации класса соответственно.
    F2 Выполняет переход к месту объявления переменной, функции, класса, на имени которых стоял курсор при нажатии.
    F1 Показывает справку для класса или метода Qt, на имени которого стоит курсор.
    Ctrl+Shift+R Переименование переменной, метода, класса, на имени которых стоит курсор. Имя будет изменено во всех местах, где встречается его использование: не только в текущем файле, но и в других файлах проекта. При замене имени будет учитываться область видимости имени, поэтому замена произойдёт только в местах обращения к имени. Именно этим это действие отличается от обычного поиска и замены текста
    Ctrl+Shift+U Поиск всех мест обращения к переменной, методу, классу на имени которого стоит курсор.
    Ctrl+K Открывает поле быстрого поиска (Locator).
    Alt+Enter Позволяет открыть доступные дополнительные действия для переменной, метода, класса, оператора в позиции курсора. Это дополнительные действия для рефакторинга (реорганизации и улучшения существующего кода) могут содержать изменение порядка параметров, изменения в текущем фрагменте кода, добавление фрагментов кода и т.д
    Ctrl+Space Вызывает выпадающий список автозавершения кода.
    Ctrl+F Поиск текста в текущем открытом файле.
    Ctrl+Shift+F Расширенный поиск текста в файле, проекте или группе проектов (доступны дополнительные настройки).

    11.4.1 Первый оконный проект

    Для создания простого оконного проекта выберите в главном меню File->New File or Project...(Файл->Новый файл или проект...) или нажмите Ctrl+N. На экране появится окно мастера новых файлов и проектов (см. рис. 11.3).

    Для создания нашего проекта выберем раздел Applications(Приложения) в списке Projects(Проекты) и выберем Qt Widgets Application как тип проекта (приложение на Qt с использованием виджетов). Нажмём кнопку Choose...(Выбрать...).

    (рис 11.3) Окно мастера новых файлов и проектов (шаг 1)

    Далее нам необходимо ввести имя проекта в поле ввода Name (например FirstGuiProject). Поле ввода Create in содержит путь, где будет создан каталог с новым проектом. Флажок Use as default project location(Использовать как место по умолчанию для размещения проектов) означает, что путь расположения проекта сохраняется и для последующих новых проектов (рис. 11.4).

    (рис 11.4) Окно мастера новых файлов и проектов (шаг 2)

    Во время следующего шага (рис. 11.5) необходимо указать комплект, с помощью которого среда будет строить новый проект. Оставим выбор инструментария по умолчанию и нажмём кнопку Next (Далее).

    Следующее окно мастера (см. рис. 11.6) информирует о классах, которые будут сгенерированы автоматически для нового проекта. Для главного окна программы будет сгенерирован класс MainWindow (поле Class name), который будет унаследован от класса QMainWindow (поле Base class). Класс QMainWindow обладает особенностями, характерными для главного окна программы, такими как главное меню, панель инструментов и т.п. Для кода класса MainWindow мастер создаст заголовочный файл — mainwindow.h (поле Header file) и файл реализации — mainwndow.cpp (поле Source file), а также добавит их в проект.

    (рис 11.5) Окно мастера новых файлов и проектов (шаг 3)

    Флажок Generate form указывает на необходимость сгенерировать и добавить к проекту файл формы для главного окна.

    (рис 11.6) Окно мастера новых файлов и проектов (шаг 4)

    В завершающем окне мастера (см. рис. 11.7) нажмите Finish (Завершить).

    Файлы формы позволяют редактировать вид окна с помощью визуального редактора интерфейса — Qt Designer. Оболочка Qt Creator также даёт возможность редактировать файлы формы. Файлы формы главного окна будет сгенерирован автоматически — mainwindow.ui (поле Form file).

    (рис 11.7) Окно мастера новых файлов и проектов (шаг 5)

    После завершения работы мастера проект откроется в окне оболочки Qt Creator. В левой части окна теперь можно исследовать структуру проекта, который состоит из всех файлов, входящих в проект и были сгенерированы мастером. Для компиляции и запуска проекта нажмите кнопку запуска программы или комбинацию клавиш Ctrl+R. После запуска появится пустое окно — главное окно нашей программы. Вот таким образом выглядит создание простого оконного проекта. Все файлы проекта были сгенерированы мастером, который используют обычно для удобства и чтобы ускорить работу. Конечно, есть и другой путь — можно создать каждый из файлов отдельно и, без каких-либо трудностей, добавить к проекту. Мы подробно рассмотрим как это делать, для того, чтобы исследовать основные составляющие проекта Qt и понять как происходит его компиляция.

    11.5 Задачи для самостоятельного решения

  • Повторите описанные шаги для создания собственного проекта. Назовите проект MyGuiProject. Класс главного окна программы назовите MyMainWindow. Просмотрите структуру проекта. Скомпилируйте и запустите проект на выполнение.
  • Попробуйте использовать любую из горячих клавиш, описанных в таблице "Некоторые важные горячие клавиши".
  • Используйте документацию Qt и найдите описание для классов QMainWindow и QApplication.
  • Вернуться к учебному плану