Qt5#

Qt — это мощный фреймворк для разработки кроссплатформенных графических приложений на C++.

Основные пакеты#

Пакет

Версия

Репозиторий

Описание

qtbase5-dev

5.15.8+dfsg-11astra16+b2

extended

Основные библиотеки Qt5

gcc

4:12.2.0-3+b1

extended

GNU C компилятор

g++

4:12.2.0-3+b1

extended

GNU C++ компилятор

cmake

3.25.1-1+b3

extended

Кроссплатформенное средство автоматизации сборки ПО из исходного кода

Дополнительные пакеты#

Пакет

Версия

Репозиторий

Описание

qtcreator

7.0.2-2astra2+b1

extended

IDE для разработки приложений Qt

gdb

13.1-3+b2

extended

GNU отладчик

cmake-qt-gui

3.25.1-1+b3

extended

Графический интерфейс для CMake

Установка Qt#

  • перед началом разработки нужно установить Qt и необходимые зависимости (минимальный набор пакетов):

sudo apt install gcc g++ cmake qtbase5-dev

Дефолтное расположение библиотек Qt5:

/usr/lib/x86_64-linux-gnu/qt5

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

ldd path/to/bin/file

Установка инструментов разработки:

  • для разработки возможно установить IDE Qt Creator, которая включают в себя Qt Designer и другие утилиты, а также отладчик gdb:

sudo apt install qtcreator gdb

Создание графического интерфейса программы#

Qt Designer#

Qt Designer — это инструмент для визуального проектирования графического интерфейса приложений на Qt. Он позволяет создавать окна, формы и диалоговые окна с помощью перетаскивания виджетов, настраивать их свойства и связи сигналов-слотов без написания кода. Его можно использовать в процессе редактирования проекта в Qt Creator, а также как самостоятельный инструмент.

Создание GUI в Qt Creator#

Проще всего создать GUI через создание нового класса в Qt Creator: Add new -> Qt -> Qt Designer Form Class. Таким образом, будет создан новый класс виджета, файл .ui, содержащий его будущий графический интерфейс, а также файлы .h и .cpp для его реализации. В случае проекта QMake Qt Creator сам добавит новые файлы в .pro файл проекта. В случае CMake нужно сделать это вручную.

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

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

Использование Qt Designer без использования Qt Creator#

Qt Designer возможно запустить отдельно, не используя Qt Creator.

Запуск Qt Designer вручную:

designer

В этом случае необходимо вручную конвертировать файлы .ui в cpp-код посредством утилиты uic, либо автоматизировать данный процесс через CMake или QMake.

Также возможно посмотреть и скопировать сгенерированный cpp-код прямо в Qt Designer. Для этого в окне Qt Designer нужно открыть окно Форма -> Показать код C++.

Ручная конвертация через uic#

uic form.ui > form.h

Данная команда на основе файла form.ui создаст файл form.h, который в дальнейшем можно использовать как обычный заголовочный файл. Нужно повторять её после каждого изменения файла form.ui.

Автоматическая конвертация через CMake#

CMakeLists.txt должен содержать строку:

set(CMAKE_AUTOUIC ON)

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

#include "ui_form.h"

Если этого не сделать, автоконвертация не произойдёт.

Предупреждение

Обратите внимание, что в include нужно указать правильное наименование ещё не сгенерированного файла.

Сгенерированные файлы именуются определенным образом:

Если .ui файл называется form.ui, нужно заменить его расширение на .h, а в начало имени добавить ui_. Получится ui_form.h

Заглавные буквы в названиях файлов сохраняются.

В результате при каждой компиляции проекта в папке сборки будет автоматически формироваться файл ui_form.h с помощью утилиты uic, который можно использовать как обычный cpp-код.

Пример проекта, использующего автоматическую конвертацию через CMake:

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)

project(qt-widgets-cmake VERSION 0.1 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

find_package(Qt5 COMPONENTS Widgets REQUIRED)

add_executable(qt-widgets-cmake main.cpp)

target_link_libraries(qt-widgets-cmake PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

main.cpp

#include <QApplication>
#include "ui_form.h"

int main(int argc, char *argv[]) {
  QApplication a(argc, argv);
  QWidget widget;
  Ui::Form ui;
  ui.setupUi(&widget);
  widget.show();
  return a.exec();
}

Автоматическая конвертация через QMake#

.pro файл проекта дополнить следующим образом:

FORMS += form.ui

Функционировать будет аналогично варианту CMake.

Пример проекта, использующего автоматическую конвертацию через CMake:

project_name.pro

QT       += widgets

CONFIG += c++17

SOURCES += main.cpp

FORMS += form.ui

main.cpp точно такой же, как в примере CMake.

Создание GUI-приложения на Qt (C++) без Qt Designer#

Графический интерфейс возможно создавать напрямую из C++ кода, не используя Designer и .ui файлы. Рассмотрим пример создания простого приложения на Qt, которое отображает окно с кнопкой, при нажатии на которую появляется сообщение.

Создайте файл main.cpp:

#include <QApplication>
#include <QPushButton>
#include <QMessageBox>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    QPushButton button("Нажми меня");

    QObject::connect(&button, &QPushButton::clicked, [&]() {
        QMessageBox::information(nullptr, "Сообщение", "Вы нажали кнопку!");
    });

    button.show();
    return app.exec();
}

Фактически это ручное написание cpp-кода, генерируемого на основе .ui файлов. В некоторых ситуациях может быть предпочтительнее из-за возможности более точно контролировать виджеты.

Компиляция и запуск:#

В Qt Creator#

Для компиляции и запуска нужно использовать иконки в левом-нижнем углу окна Qt Creator:

  • Запуск

  • Запуск с отладкой

  • Сборка проекта

В консоли#

Также возможно воспользоваться консольными командами сборки.

Для проекта cmake:#

  • Создать кеш cmake:

cmake -S path/to/source/dir -B path/to/build/dir

Данное действие можно также произвести с помощью утилиты cmake-gui.

sudo apt install cmake-qt-gui

Запустив графический интерфейс командой cmake-gui, задайте пути до папки исходного кода и папки сборки, затем нажмите кнопки Configure и Generate. После этого запустить компиляцию можно командой make из папки сборки.

  • Собрать проект:

cmake --build path/to/build/dir --target all

Для проекта qmake:#

  • Создать кеш qmake:

cd path/to/build/dir && qmake path/to/source/dir/project_name.pro
  • Собрать проект:

make # оставаясь в той же директории

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

Отладка#

Отладке поддаётся только C++ (.ui отлаживать невозможно, поскольку исполняется не он сам, а сгенерированный на его основе cpp-код).

Для отладки нужно собрать проект с отладочной информацией, затем запустить отладку.

Без использования Qt Creator:#

Сборка через CMake:#

Добавить в CMakeLists.txt строку

set(CMAKE_BUILD_TYPE Debug)

Или при вызове cmake из консоли добавить параметр

-DCMAKE_BUILD_TYPE=Debug

Сборка через QMake:#

В .pro файл проекта добавить строку:

CONFIG += debug

Или при вызове qmake из консоли добавить параметр

CONFIG+=debug

Запуск отладки:#

Запуск gdb из консоли ничем не отличается от такового для приложений C++ без использования Qt.

Пример:

gdb /path/to/build/dir/my_project

break main

run

С использованием Qt Creator:#

Сборка:#

Выбрать конфигурацию сборки для отладки:

Проекты -> Сборка и запуск -> Сборка -> Build configuration: выбрать Debug

Или вручную изменить параметр Build type:

Проекты -> Сборка и запуск -> Сборка -> Build type: debug

Затем нажать кнопку «собрать» в Qt Creator.

Запуск отладки:#

Нажать кнопку «запустить отладку» в Qt Creator. Точки останова можно выставлять интерактивно в редакторе кода в Qt Creator, кликнув в пустое место слева от номера строки.

Упаковка в установочный файл#

После завершения разработки приложение можно упаковать:

Debian Package (.deb): Используйте dpkg или CPack (для проектов cmake).