c-cpp-cookies
  • Полезные материалы
    • About
  • Настройка окружения
    • Git
      • Git CLI
      • Git GUI
      • Git Web
      • Git в среде разработке
        • Visual Studio
        • Visual Studio Code
        • CLion
        • Qt Creator
    • Стандарты (они же ISO)
    • Qt about
    • IDE
      • Visual Studio Code
        • Код в Visual Studio Code
        • Разработка в Visual Studio Code
      • Visual Studio
        • Настройки Visual Studio и проектов
        • Код в Visual Studio
        • Visual Studio + GitHub
      • Qt + Qt Creator
        • Установка Qt и QtCreator
        • Примеры проектов на Qt
      • CLion
        • Настройки CLion
        • Код в CLion
        • CLion + GitHub
    • Компиляторы
      • Clang + Visual Studio
      • Clang + CLion
  • Best practices
    • Антипаттерны и способы улучшения кода
      • 0. Освобождение ресурсов
      • 1. Чтение данных из файла
      • 2. Открытие файлов
      • 3. Объявление переменных
      • 4. Выделение памяти
      • 5. Необдуманный код
      • 6. Глубокие if
      • 7. Длинные if
      • 9. Non-void функции
      • 10. Создание массивов
      • 11. Проверка формата файла
  • Сборка программы
    • Сборка программы
    • Системы сборки / Build systems
      • Проект и решение
      • Make
      • Ninja
      • CMake
      • MSBuild
    • Подключение внешних библиотек
    • Библиотеки
  • Отладка
    • Отладка / Debugging
    • Запуск программы
    • Точки останова / Breakpoints
      • Обычные точки останова / General breakpoint
      • Условные точки останова / Conditional breakpoint
      • Зависимые точки останова / Dependent breakpoint
      • Временные точки останова / Temporary breakpoint
      • Точки трассировки / Breakpoint actions и tracepoints
    • Стек вызовов / Call stack
    • Локальные переменные / Locals
    • Просмотр области памяти / Memory view
    • Исключения / Exceptions
  • Анализ
    • Поиск утечек памяти
    • Санитайзеры
  • Возможности IDE
    • Возможности IDE
    • Продвинутый текстовый редактор
    • Закладки / Bookmarks
    • Платформы / Platforms
    • Конфигурации сборки / Build configurations
    • Шаблонные проекты / Project templates
    • Терминал / Terminal
    • Сборка / Build
    • Запуск программы / Run program
    • Code style
    • Работа с Github Actions
  • Тестирование
    • Тестирование
    • Google test
      • Gtest в VS
      • Gtest в CLion
      • Gtest в VSCode
    • Покрытие кода (code coverage)
Powered by GitBook
On this page
  • Пример организации проекта с несколькими конфигурациями
  • Описание проекта
  • QtCreator
  • Terminal
  1. Настройка окружения
  2. IDE
  3. Qt + Qt Creator

Примеры проектов на Qt

Пример
Пояснение

Пример использования OpenGL для отрисовки в окне и обработки событий мыши.

Иллюстрация системы сигналов и слотов.

Пример небольшого приложения с графическим пользовательским интерфейсом, описанного кодом.

Пример приложения с различными элементами пользовательского интерфейса.

Пример организации проекта с несколькими конфигурациями

Возьмём следующий пример:

Mode   Name
----   ----
d----- include/         # заголовочные файлы проекта (API или интерфейс проекта)
d----- src/             # исходные файлы проекта
d----- test/            # вспомогательные и исходные файлы с тестами
d----- resources/       # директория с ресурсами
------ qt_project.pro   # файл qmake проекта
------ resources.qrc    # файл ресурсов

Проект лабораторной работы состоит из двух частей: проект и набор тестов. Проект состоит из заголовочных файлов и файлов с исходным кодом, включая main.cpp, содержащий точку входа программы. Unit-тесты для тестирования проекта располагаются в файлах в директории test/, точка входа для запуска тестов располагается в файле tests.cpp.

Если проект не включает в себя unit-тесты, то директория test/ отсутствует.

Описание проекта

В qmake-проекте можно описать несколько конфигураций. Ниже приведёна общая часть для обоих конфигураций: приложения и тестов.

# Template: результат сборки исполняемый файл (app), библиотека или плагин.
TEMPLATE += app

# Configs: определяет конфигурацию проекта и параметры компилятора.
CONFIG += c++latest
CONFIG += strict_c++

# Qt module: модули Qt, которые будут использоваться в проекте.
QT += core

# INCLUDEPATH: директории с заголовочными файлами. Аналог `-I` clang-а.
INCLUDEPATH += \
	include/

# HEADERS: список заголовочных файлов, используемых в проекте.
HEADERS += \
	include/common.h
    
# SOURCES: список файлов с исходным кодом, используемых в проекте.
SOURCES += \
	src/common.cpp
    
# RESOURCES: файл с ресурсами (QtResources).
RESOURCES += \
    resources.qrc

Осталось указать специфичные для наших конфигураций опции и файлы.

solution {
	# Solution - is GUI.
	CONFIG += qt

	# Qt modules.
	QT += widgets gui

	# Solution specific headers/sources.
	HEADERS +=
	SOURCES += \
		src/main.cpp
}
tests {
	# Tests - is commandline tool.
	CONFIG += cmdline

	# Tests specific headers/sources.
	SOURCES += \
		test/tests.cpp

    # Example of using googletests
	GTEST_INCLUDE = $$GTEST_ROOT/include
	GTEST_LIBPATH = $$GTEST_ROOT/lib

	INCLUDEPATH += $$GTEST_INCLUDE
	LIBS += -L$$GTEST_LIBPATH -lgtest
}
Итоговый файл проекта
TEMPLATE += app

CONFIG += c++latest
CONFIG += strict_c++

QT += core

INCLUDEPATH += \
	include/

HEADERS += \
	include/common.h
    
SOURCES += \
	src/common.cpp

RESOURCES += \
    resources.qrc

solution {
	CONFIG += qt

	QT += widgets gui

	HEADERS +=
	SOURCES += \
		src/main.cpp
}

tests {
	CONFIG += cmdline

	SOURCES += \
		test/tests.cpp

	GTEST_INCLUDE = $$GTEST_ROOT/include
	GTEST_LIBPATH = $$GTEST_ROOT/lib

	INCLUDEPATH += $$GTEST_INCLUDE
	LIBS += -L$$GTEST_LIBPATH -lgtest
}

QtCreator

После описания файла проекта необходимо настроить конфигурации сборки.

Для этого после открытия проекта следует перейти в раздел Projects, выбрать интересующий Kit и для него перейти в Build.

Настроим Debug и Release как solution, начнём с Debug. Сверху в Edit build configuration выбираем Debug. Затем необходимо в Build Steps дополнить первый шаг qmake аргументом про нашу конфигурацию. Справа от qmake: qmake qt_project.pro нажимаем на Details, и в Additional arguments: дописываем CONFIG+=solution:

Для настройки Release конфигурации действия аналогичны, в Edit build configuration выбираем Release.

Настроим Debug и Release как tests, начнём с Debug. В таком случае необходимо создать новые build configuration. Сверху выбираем Add - Debug и задаём уникальное имя для тестовой debug конфигурации.

После создания автоматически произойдёт переключение на созданную конфигурацию. Остаётся лишь указать аргументы для этой конфигурации. В нашем случае:

CONFIG+=tests GTEST_ROOT="<path/to/googletest>"

GTEST_ROOT – переменная, которая используется в нашем примере проекта; содержит путь до корня googletests.

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

Terminal

Сборка из терминала представляет собой повтор Build Steps из настроек QtCreator.

Конфигурация solution (основное решение).

qmake qt_project.pro CONFIG+=solution

Конфигурация tests (тесты).

qmake qt_project.pro CONFIG+=tests GTEST_ROOT=<path/to/googletest>

Так как GoogleTest будет динамическим, то дополнительно перед запуском.

set PATH=<path/to/googletest>\bin;%PATH%

Сборка с использованием MSVC/cl.

nmake -f Makefile.Debug
REM Debug-сборка

nmake -f Makefile.Release
REM Release-сборка

Запуск.

.\debug\qt_project.exe
REM Debug

.\release\qt_project.exe
REM Release

Конфигурация solution (основное решение) как Release cборка.

qmake qt_project.pro CONFIG+=solution CONFIG+=release

Как Debug сборка.

qmake qt_project.pro CONFIG+=solution CONFIG+=debug

Конфигурация tests (тесты) как Release сборка.

qmake qt_project.pro CONFIG+=tests CONFIG+=release GTEST_ROOT=<path/to/googletest>

Как Debug сборка.

qmake qt_project.pro CONFIG+=tests CONFIG+=debug GTEST_ROOT=<path/to/googletest>

Так как GoogleTest будет динамическим, то дополнительно перед запуском.

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:<path/to/googletest>/bin"

Сборка.

make

Запуск.

./qt_project
PreviousУстановка Qt и QtCreatorNextCLion

Last updated 1 month ago

OpenGL
Сигналы и слоты
Простенький калькулятор
Widgets