English | Русский
Шаблон для создания простого кроссплатформенного приложения с графическим интерфейсом на базе Qt.
Можно начинать прямо с разработки виджета содержащего целевой функционал.
Особенности:
- Готовый шаблон. Не требует дополнительной подготовки к работе.
- Кроссплатформенный. Может быть собран для Windows, Linux, любой ОС поддерживаемой Qt.
- Минимальная архитектура и структура директорий, обеспечивающие пониженное зацепление.
- Система настроек, независимая от ОС.
- Наборы тестов и покрытие уже настроены.
- Инструменты контроля стиля кода.
- Поддержка интернационализации.
- Встроенная поддержка поиска утечек памяти.
- Нет Boost.
- Cmake как система сборки.
- Базовый CI на основе GitHub Actions.
Нужен Qt 5.12 или выше.
Установите Qt c официального сайта.
Пример для Ubuntu 20.04, для других версий или дистрибутивов смотрите Qt Wiki.
sudo apt install build-essential qt5-default qttools5-dev-tools
Смотрите Qt Wiki.
Сборка in-source запрещена. Собирайте в новой директории:
cmake -S. -Bbuild
cmake --build build
Папка src/example
содержит пример создания приложения с использованием этого каркаса.
- Создайте класс основного окна от
UtilityMainWindow
вместоQMainWindow
. - Инициализируйте UI в конструкторе, в соответствии с документацией Qt.
- Переопределите getExtensions(), getFileReadMode(), getFileWriteMode() чтобы указать тип фала и режимы записи-чтения.
- Переопределите loadFile(fileName) and saveFile(filename) реализовав чтение и запись вашего файла. В примере есть базовый вариант подходящий для текста.
- Реализуйте isDocumentModified() and clearDocument() это позволит окну отвечать на состояние документа.
- Делегируйте методы cut(), copy() and paste() вашему виджету.
- В
main.cpp
заменитеMainWindow
на ваш класс.
Шаблон включает поддержку интернационализации Qt.
Вам нужно только создать перевод, чтобы это заработало.
Обратите внимание, в данный момент модуль utility_boilerplate_qt5
поддерживает только 2 языка:
- Английский — встроен в исходный код
- Русский
ru_RU для примера, используйте ваш код языка.
-
Соберите все строки внутри
tr()
в TS файл с использованиемlupdate
.lupdate *.cpp -ts i18n/ru/app_ru.ts
-
Откройте в средстве переводов и переведите.
linguist i18n/ru/app_ru.ts
-
Qt может загружать только один файл перевода за раз, поэтому необходимо создать полный перевод используя
lconvert
. Найдите файл содержащий локализацию системных строк Qtqtbase_<language code>.ts
в пакете установки или репозитории и поместите его в директориюi18n/<language code>
. Далее соберите TS файлы в один с помощьюlconvert
.cd i18n/ lconvert -i ru/*.ts ../../utility_boilerplate_qt5/i18n/ru/*.ts -o ru/appcomp_ru.ts
-
Соберите QM файл используя
lrelease
. Система сборки автоматически копирует все QM файлы в директорию, где исполняемый файл может их найти.lrelease ru/appcomp_ru.ts ru/appcomp_ru.qm
-
Чтобы проверить, что перевод загружается корректно, запустите приложение из командной строки, и найдите строчку
Translation for "<language code>" load successfully
. Если перевод не загрузился вы увидитеCan't load translation for "<language code>"
. Qt не предлагает дополнительной отладочной информации.
Проект предлагает инструменты контроля стиля кода с помощью clang-format and cmake-format. Включая стили для IDEA.
Проверка стиля в CI провалится, если хоть один файл не соответствует указанным правилам.
Установка инструментов контроля стиля необязательна.
clang-format
может быть загружен с пакетом LLVM.
cmake-format
устанавливается с помощью pip
.
pip install cmakelang pyyaml
Должны иметь всё необходимое, кроме cmake-format
.
pip install cmakelang
Подробности в документации Format.cmake.
Проверить формат всех файлов в проекте.
cmake --build build --target check-format
Исправить формат всех файлов.
cmake --build build --target fix-format
Каркас включает поиск утечек памяти на базе техники debug_new, реализованной библиотекой NVWA.
Чтобы включить этот механизм на Linux и Mac добавьте ключ -DNVWA
во время сборки.
На Windows механизм выключен в силу плохой совместимости.
Используйте тикеты (issues), если у вас есть вопросы.