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.