I'm confused about modules in Qt QML. I've read all the docs, but it doesn't make clear some basic ideas.
I understand that i can put a bunch of QML files into a directory and add a qmldir file to describe an identified module. When i do this and adjust the QML_IMPORT_PATH, QtCreator is happy and stops underlining the import ModuleName 1.0 line.
So creator is happy, but it does not work. I get module is not installed. my questions are:
Sorry, for all these questions, but the basics of these modules is just not clear. I don't understand if a "module" is just the sharing of files or is it a compiled unit.
thanks for any help.
I'll try to answer your questions:
QmlExtensionPlugin
for that purpose. You can also use as a module plain QML files in one
directory with a qmldir
describing this module. It is a matter of
distributing your code. With QmlExtensionPlugin
you provide the
module compiled, if you want to hide the code.QML2_IMPORT_PATH
, in directories that you added using engine->addImportPath()
There are a bunch of things that can lead to a module not being loaded. You can check the following:
qmldir
should be the same as the directory
name, where the module actually resides. For example if your module
has module identifier module Test.Module
in qmldir
, your module's
relative path must be Test/Module
.QML2_IMPORT_PATH
(make sure there is 2
in the name) env variable to point to directory containing your module. There is also a QQmlEngine::addImportPath
method, which adds the directory to the list to lookup for plugins.ldd
command on Linux.QT_PLUGIN_PATH
runtime variable may help to load plugins. It should point to a directory containing you plugin's directory, not the plugin's directory itself.QT_DEBUG_PLUGINS=1
and QML_IMPORT_TRACE=1
environment variablesYou can also read this link: https://doc.qt.io/qt-5/qtqml-modules-identifiedmodules.html