Hinzufügen von etwas zu @pixelgrease Antwort beitragen, fand ich eine andere Technik, die nicht den Pfad relativ import "."
, Workarounding der Fehler QTBUG-34418. Dies ist besonders nützlich, wenn eine qmldir
- und Singleton-Klasse an einer anderen Stelle als die qml-Datei verwendet wird, in der der Singleton verwendet wird. Die Technik erfordert das Definieren eines geeigneten Moduls innerhalb der Baumstruktur: Das Modul wird dann aufgelöst, indem der übergeordnete Pfad des Moduls zur QML-Engine mit QmlEngine::addImportPath(moduleParentPath)
hinzugefügt wird. Zum Beispiel:
qml/
├── <ModuleName>/
│ ├── <ClassName>.qml
│ ├── qmldir
In main.cpp haben Sie dann:
QQmlApplicationEngine engine;
engine.addImportPath("qrc:/qml"); // Can be any directory
engine.load("qrc:/qml/main.qml");
Wenn Sie Ressourcen verwenden, qml.qrc:
<RCC>
<qresource prefix="/">
(...)
<file>qml/main.qml</file>
<file>qml/MySingletons/MySingleton.qml</file>
<file>qml/MySingletons/qmldir</file>
</qresource>
</RCC>
In qmldir:
module MySingletons
singleton MySingleton 1.0 MySingleton.qml
In main.qml oder einer anderen qml-Datei in einem anderen Verzeichnis Quelle:
import MySingletons 1.0
Dann verwenden Sie MySingleton-Klasse wie gewohnt. Ich habe das Beispiel MySingletonWithModule.7z als Referenz an den Fehler QTBUG-34418 angehängt.
Warum nicht einfach eine einfache .pragma-Bibliotheks-JavaScript-Datei? – Matteo