Defining of a QML module allows:
- The sharing of common QML types within a project - for example, a group of UI components that are used by different windows
- The distribution of QML-based libraries
- The modularization of distinct features, so that applications only load the libraries necessary for their individual needs
- Versioning of types and resources so that the module can be updated safely without breaking client code
Defining a QML Module
Note that defining a module is not the only way to share common QML types within a project - a simple QML document directory import may also be used for this purpose.
Supported QML Module Types
There are two different types of modules supported by QML:
Identified modules explicitly define their identifier and are installed into QML import path. Identified modules are more maintainable (due to type versioning) and are provided with type registration guarantees by the QML engine which are not provided to legacy modules. Legacy modules are only supported to allow legacy code to continue to work with the latest version of QML, and should be avoided by clients if possible.
Providing Types and Functionality in a C++ Plugin
An application which has a lot of logic implemented in C++, or which defines types in C++ and exposes them to QML, may wish to implement a QML plugin. A QML extension module developer may wish to implement some types in a C++ plugin (as opposed to defining them via QML documents) to achieve better performance or for greater flexibility.
Every C++ plugin for QML has an initialiatization function which is called by the QML engine when it loads the plugin. This initialization function must register any types that the plugin provides, but must not do anything else (for example, instantiating QObjects is not allowed).
See Creating C++ Plugins For QML for more information.