Evgenii Legotckoi
Evgenii LegotckoiНаурыз 22, 2019, 11:34 Т.Ж.

Qt - Құжатсыз QMake - Файлдарды көшіру

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

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

Но сейчас речь пойдет о копировании файлов с использованием того функционала, который был реализован в Qt 5.6, но при этом о нем почти ничего не известно.


Преамбула

Я уже реализовал копирование файлов с помощью QMAKE_EXTRA_TARGETS при разработке проекта установщика на QtIFW , что часто советуют на различных форумах.

А вот так выглядел код копирования файлов.

INSTALLER_OFFLINE = $$OUT_PWD/../../InstallerRelease/Hello.offline
INSTALLER_ONLINE = $$OUT_PWD/../../InstallerRelease/Hello.online

# Set a variable that should contain the path to the data folder
DESTDIR_WIN = $$PWD/packages/ru.evileg.helloinstaller/data
DESTDIR_WIN ~= s,/,\\,g
# We set the path from where all the application with DLLs will need to be copied
PWD_WIN = $$OUT_PWD/../../HelloRelease
PWD_WIN ~= s,/,\\,g

# Before assembling the installers, you must copy the files from the project's output folder along with all the DLLs to the data folder that belongs to the package you are building.
copydata.commands = $(COPY_DIR) $$PWD_WIN $$DESTDIR_WIN
first.depends = $(first) copydata
export(first.depends)
export(copydata.commands)
# we set a custom build target, in which we first perform file compiling and then the rest, which follows the QMake script
QMAKE_EXTRA_TARGETS += first copydata

Довольно монструозное решение, особенно если учесть, что синтаксис самого QMake так себе. К тому же настройка копирования файлов с помощью этого функционала тоже нетривиальная задача.

Реализация с использованием недокументированного модуля file_copies

А вот недокументированный модуль file_copies делает все несколько проще и по настройке похож на настройку INSTALLS.

# Add the file_copies module
CONFIG += file_copies
# Add a variable that describes the copied files.
COPIES += translations

# Determine with which extension we need to copy the files and in what way they are located
translations.files = $$files($$PATH_SRC_ROOT/*.qm)

# Specify the path where to copy files
translations.path = $$DESTDIR

В этом случае нам не нужно вызывать сборку с аргументом установки, чтобы скопировать файлы, необходимые для УСТАНОВКИ.

То есть мы можем скопировать, например, файлы переводов в директорию сборки exe-файла, чтобы проверить, правильно ли работают переводы, или еще что-то в этом роде, без полного развертывания приложения.

Примечания

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

translations.base = $$PWD/target_path

Копирование одного файла не сработало, то есть если писать так

translations.files = $$files($$PATH_SRC_ROOT/application_es.qm)

Этот файл просто не был скопирован. Возможно, на самых последних версиях Qt работает стабильно, а вот с 5.9.3, на которой я тестировал, не заработало.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
Г

C++ - Тест 001. Первая программа и типы данных

  • Нәтиже:66ұпай,
  • Бағалау ұпайлары-1
t

C++ - Тест 001. Первая программа и типы данных

  • Нәтиже:33ұпай,
  • Бағалау ұпайлары-10
t

Qt - Тест 001. Сигналы и слоты

  • Нәтиже:52ұпай,
  • Бағалау ұпайлары-4
Соңғы пікірлер
G
GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
d
dblas5Шілде 5, 2024, 11:02 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssrАқп. 8, 2024, 6:43 Т.Қ.
Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Енді форумда талқылаңыз
Evgenii Legotckoi
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
F
FynjyШілде 22, 2024, 4:15 Т.Ж.
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
BlinCT
BlinCTМаусым 25, 2024, 1 Т.Ж.
Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
BlinCT
BlinCTМамыр 5, 2024, 5:46 Т.Ж.
Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
Evgenii Legotckoi
Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

Бізді әлеуметтік желілерде бақылаңыз