Qt5 QML-Modul ist nicht installiert
Ich bin verwirrt über die Module Qt QML. Ich habe gelesen, alle die docs, aber es ist nicht klar, einige grundlegende Ideen.
Ich verstehe, dass ich eine Reihe von QML-Dateien in ein Verzeichnis und fügen Sie eine qmldir-Datei zur Beschreibung eines identifizierten Moduls. Wenn ich dies tun, und passen Sie die QML_IMPORT_PATH, QtCreator ist glücklich und hält unterstreichen den import ModuleName 1.0 Linie.
Schöpfer So glücklich ist, aber es funktioniert nicht. Ich bekomme-Modul ist nicht installiert.
meine Fragen sind:
- was bedeutet es "installiert". Ich habe die Dateien, aber ich habe nicht "installiert" werden Sie überall.
- soll ich bauen/kompilieren Sie das Modul, um eine DLL.so ?
- funktioniert das Modul QML Dateien in den Ressourcen der Haupt-app, ansonsten, wo sind Sie zu finden?
- mein main.qml Datei ist Teil der Ressourcen für die app, wie funktioniert die app suchen Sie die Ressourcen von dem Modul zur Laufzeit.
Sorry, für all diese Fragen, aber die Grundlagen dieser Module wird einfach nicht klar. Ich verstehe nicht, wenn ein "Modul" ist nur die gemeinsame Nutzung von Dateien oder ist es eine kompilierte unit.
vielen Dank für jede Hilfe.
InformationsquelleAutor jkj yuio | 2016-02-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich werde versuchen, deine Fragen zu beantworten:
dass Sie gefunden werden können, die zur Laufzeit
Verzeichnis mit qmldir Beschreibung dieses Modul. Es ist die Frage der
verteilen Sie Ihren code - mit QmlExtensionPlugin Sie die
Modul kompiliert, wenn Sie ausblenden möchten den code.
engine->addImportPath()
Gibt es eine Reihe von Dingen kann dazu führen, dass ein Modul nicht geladen wird. Sie können überprüfen Sie die folgenden:
name, in dem das Modul tatsächlich wohnt. Zum Beispiel, wenn Sie Ihr Modul
hat Modul-id
module TestModule
im qmldir, Ihre Moduledirectory name muss
TestModule
.plugin (gemeinsam genutzte Bibliothek), stellen Sie sicher, dass die plugin-Verzeichnis name ist
das gleiche wie der plugin-name.
QML2_IMPORT_PATH
(stellen Sie sicher, es ist2
im Namen) env-variable zeigt auf das Verzeichnis mit deinem Modul. Es gibt auch eineQQmlEngine::addImportPath
Methode, wodurch das Verzeichnis in der Liste zum suchen nach plugins.ldd
Befehl auf Linux.QT_PLUGIN_PATH
runtime-Variablen kann helfen, plugins zu laden. Es sollte auf ein Verzeichnis, in dem Sie die plugin-Verzeichnis, nicht in das plugin-Verzeichnis selbst.QT_DEBUG_PLUGINS=1
undQML_IMPORT_TRACE=1
UmgebungsvariablenKönnen Sie auch diesen link Lesen:
https://doc.qt.io/qt-5/qtqml-modules-identifiedmodules.html
addImportPath
einem absolut Weg, dann funktioniert es. Aber ich will das QML verwiesen wird, werden lokal auf dem Projekt. relative Pfade scheitern, weil Sie nicht arbeiten aus den resultierenden build-Verzeichnis. Ich habe auch herausgefunden, wie man kompilieren Sie das Modul + seine Ressourcen in eine DLL. Aber ich habe keine Ahnung, wie das laden dieser DLL. arrangieren Sie werden in den import-Pfad nicht funktioniert, weil, ich glaube, die DLL muss eine qmldir. Die DLL registrieren, die Typen drin, aber das würde bedeuten, laden Sie es zuerst. Art Huhn & ei??Geben Sie einfach nur die qmldir für die DLL-plugin, es ist etwa 3 Linien lange, legte qmldir neben dem plugin, legen Sie diese alle in einem Ordner mit dem richtigen Namen, wie ich bereits in der Antwort, und legte den Ordner neben einer ausführbaren Datei. Sollte dies funktionieren. Hast du das ausprobiert?
Danke. Nach einem langen Weg und viel suchen, das hilft eine Menge!
InformationsquelleAutor rightaway717
In meinem Fall (ich habe alle QML-Dateien in qrc-Ressourcen) gearbeitet hinzufügen qmldir zu Ressourcen auch und rufen Sie die Methode addImportPath("qrc:/") QQmlApplicationEngine.
Meine main.cpp sieht aus wie:
Wichtige Teile meiner .pro-Datei sieht wie folgt aus:
Meine qmldir:
Meine qrc:
Und schließlich auch mein main.qml:
QtCreator freut sich (nicht unterstreichen-Komponenten und-Importe) und Modul geladen ist.
Hoffe, das hilft.
InformationsquelleAutor arxarian
Möchte ich erweitern auf arxarian Antwort - ich denke das ist die beste Technik für die Integration von Modulen - aber konnte nicht, passen diese Gedanken in einem Kommentar, hier also eine neue Antwort.
Es ist wichtig zu verstehen, dass qml-Module und die zugehörigen Ressourcen sind Laufzeit-Entitäten und sind davon ausgegangen, dass separat existieren an einem bestimmten Ort relativ zu der ausführbaren Datei, es sei denn, Sie sind in der Anwendung enthalten Ressourcen. Indem Sie in der Ressourcen, sind Sie immer noch Laufzeit-Entitäten, aber Sie liegen unter der qrc:/- root-Pfad in der Anwendung binären. Das ausblenden der Module ist der Hauptgrund, warum ich denke, dies ist die beste Technik, wenn Sie möchten, dass Ihre Module zu öffnen, um die revision nach der Bereitstellung oder unabhängig voneinander einsetzbar als vorkompilierte plugins (D. H., in der Ressource Speicher eine dynamisch verknüpfte Bibliothek).
So, hier ist meine Erklärung der wichtigsten Elemente von arxarian Antwort:
engine.addImportPath("qrc:/");
notwendig, die in den C++ - code vor dem laden der qml, um anzuweisen, den Motor zu suchen qml-Module in der Anwendung Ressource-Speicher.RESOURCES += MyModule/mymodule.qrc
erforderlich ist, in die Projekt - (.pro Datei), fügen Sie die Modul-Dateien in den Anwendungs-Ressource-Speicher.QML_IMPORT_PATH += $$PWD
in der Projekt-Datei sagt Qt Creator zu schauen, für die das Modul ab dem Stammverzeichnis des Projekt-source-tree. In meinem Fall hatte ich legen Sie diese in ein Unterverzeichnis (z.B. "ui/Module"), weil mein Modul Verzeichnisse von dort aus gestartet. Der import-Pfad sollte die Wurzel(N) unter nicht alle Modul-Verzeichnisse. So weit wie ich kann sagen, diese Anleitung ist nur für die Qt Creator IDE und keine Auswirkungen auf die Aufbau - ,Grund #1 ist erforderlich.<qresource prefix="/MyModule">
in das Modul .qrc-Datei definiert die Modul-Unterverzeichnis relativ zu der qrc:/root in der Anwendung Ressource-Speicher.import MyModule <version>
Anweisung in qml ist jetzt das setup für den Erfolg. Beim Start wird das Triebwerk befindet sich das Modul in seinem Verzeichnis unter qrc:/, analysiert die qmldir-Datei zu definieren, das Modul und gegründet der name und die version von diesen Einträgen.Ich hoffe, dies hilft anderen verstehen, was Los ist, und bitte lassen Sie mich wissen, wenn ich falsch verstanden habe, nichts.
InformationsquelleAutor Travis R
Einem ähnlichen Problem kostete mich ein bisschen Zeit, so dass ich gerade hier posten, vielleicht sparen Sie den nächsten Mann einige Mühe.
Mein problem war, dass eine unsichtbare Charakter hatte, sickerten in den Namen des Moduls. Wahrscheinlich durch kopieren und einfügen. Hier mein Problem:
Beispiel Fehler Ausgabe:
Alles sieht gut aus und der Pfad, der angezeigt wird, ist tatsächlich die richtige. Also, was ist falsch?
Nun, kopieren Sie diesen Pfad, um ein Terminal-Fenster:
Da ist es, das:
Löste das Problem durch manuelles Abtippen der name der Komponente in der qmldir Datei, und damit effektiv löschen der unsichtbaren Zeichen.
InformationsquelleAutor Tony
Ich hatte das gleiche problem und habe das nun behoben. Ich fand eine QML plugin für iOS. Es gibt mehrere Dinge, die erledigt werden müssen:
1. Das plugin pro Datei muss eine Ergänzung:
2. Die QML plugin qmldir Datei muss eine zusätzliche Zeile wie diese:
3 Der Kunde Projekt pro Datei muss eine Ergänzung wie diese:
InformationsquelleAutor user3822770