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).