Evgenii Legotckoi
Evgenii Legotckoi22. März 2019 11:34

Qt - Nicht dokumentiertes QMake - Kopieren von Dateien

Qt ist ein ziemlich großes Framework, in das ständig Funktionen eingeführt werden, die leider entweder keine Zeit zum Dokumentieren haben oder das Dokumentieren vergessen.

Neben der QQuickItem-Dokumentation empfehle ich beispielsweise dringend, sich den Quellcode oder zumindest die Header-Dateien anzusehen. Ich frage mich, wie viele öffentliche Methoden existieren, die nicht in der Dokumentation beschrieben sind, aber erfolgreich angewendet werden können und mit einem Wort sehr nützlich sind.

Aber jetzt werden wir über das Kopieren von Dateien mit der in Qt 5.6 implementierten Funktionalität sprechen, aber darüber ist fast nichts bekannt.


Präambel

Ich habe das Kopieren von Dateien mit QMAKE_EXTRA_TARGETS bereits implementiert, als ich ein QtIFW-Installer-Projekt entwickelte , was oft in verschiedenen Foren empfohlen wird.

Und so sah der Code zum Kopieren von Dateien aus.

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

Eine ziemlich monströse Lösung, besonders wenn man bedenkt, dass die Syntax von QMake selbst so lala ist. Darüber hinaus ist das Einrichten des Kopierens von Dateien mit dieser Funktionalität ebenfalls eine nicht triviale Aufgabe.

Implementierung mit dem undokumentierten Modul file_copies

Aber das undokumentierte file_copies-Modul macht alles ein wenig einfacher und ähnelt im Setup dem INSTALLS-Setup.

# 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

In diesem Fall müssen wir die Assembly nicht mit dem Argument install aufrufen, um die für INSTALL benötigten Dateien zu kopieren.

Das heißt, wir können beispielsweise Übersetzungsdateien in das Build-Verzeichnis der Exe-Datei kopieren, um zu überprüfen, ob die Übersetzungen korrekt funktionieren, oder ähnliches, ohne die Anwendung vollständig bereitzustellen.

Anmerkungen

Optional können Sie einen Basispfad angeben, der vom ursprünglichen Pfad getrennt werden soll.

translations.base = $$PWD/target_path

Das Kopieren einer Datei hat nicht funktioniert, das heißt, wenn Sie so schreiben

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

Diese Datei wurde einfach nicht kopiert. Vielleicht funktioniert es stabil auf den neuesten Versionen von Qt, aber es funktionierte nicht mit 5.9.3, auf dem ich getestet habe.

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
A
ALO1ZE19. Oktober 2024 08:19
Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken