diff options
Diffstat (limited to 'src/qml/doc/src/qmllanguageref/modules/qqmlextensionplugin.qdocinc')
-rw-r--r-- | src/qml/doc/src/qmllanguageref/modules/qqmlextensionplugin.qdocinc | 112 |
1 files changed, 31 insertions, 81 deletions
diff --git a/src/qml/doc/src/qmllanguageref/modules/qqmlextensionplugin.qdocinc b/src/qml/doc/src/qmllanguageref/modules/qqmlextensionplugin.qdocinc index b1fce12dc3..771d520f8a 100644 --- a/src/qml/doc/src/qmllanguageref/modules/qqmlextensionplugin.qdocinc +++ b/src/qml/doc/src/qmllanguageref/modules/qqmlextensionplugin.qdocinc @@ -1,4 +1,4 @@ -\l QQmlEngineExtensionPlugin is a plugin interface that makes it possible to +\l QQmlEngineExtensionPlugin is a plugin interface that lets you create QML extensions that can be loaded dynamically into QML applications. These extensions allow custom QML types to be made available to the QML engine. @@ -9,16 +9,28 @@ To write a QML extension plugin: to register the plugin with the Qt meta object system. \li Use the \l QML_ELEMENT and \l QML_NAMED_ELEMENT() macros to declare QML types. -\li Write a project file for the plugin. Add: - \list - \li \c {CONFIG += qmltypes} to instruct the build system to generate - QML types. - \li \c {QML_IMPORT_NAME = <my.import.name>} to specify the import name. - \li \c {QML_IMPORT_MAJOR_VERSION = <version>} to specify the import - major version. - \endlist -\li Create a \l{Module Definition qmldir Files}{qmldir file} to - describe the plugin +\li Configure your build file. + + CMake: + \badcode + qt_add_qml_module(<target> + URI <my.import.name> + VERSION 1.0 + QML_FILES <app.qml> + NO_RESOURCE_TARGET_PATH + ) + \endcode + + qmake: + \badcode + CONFIG += qmltypes + QML_IMPORT_NAME = <my.import.name> + QML_IMPORT_MAJOR_VERSION = <version> + \endcode +\li If you're using qmake, create a + \l {Module Definition qmldir Files} {qmldir file} to describe the plugin. + Note that CMake will, by default, automatically generate the + \l {Module Definition qmldir Files} {qmldir file}. \endlist QML extension plugins are for either application-specific or library-like @@ -26,6 +38,14 @@ plugins. Library plugins should limit themselves to registering types, as any manipulation of the engine's root context may cause conflicts or other issues in the library user's code. +\note When using the CMake \l qt_add_qml_module API, a plugin will be generated +automatically for you. It will take care of type registration. +You only need to write a custom plugin if you have special +requirements, such as registering custom image +providers. In that case, pass +\l{NO_GENERATE_PLUGIN_SOURCE} to the \c qt_add_qml_module +call to disable the generation of the default plugin. + The linker might erroneously remove the generated type registration function as an optimization. You can prevent that by declaring a synthetic volatile pointer to the function somewhere in your code. If your module is @@ -42,73 +62,3 @@ that's part of the same binary as the registration: volatile auto registration = &qml_register_types_my_module; Q_UNUSED(registration); \endcode - -\section1 TimeExample QML extension plugin - -Suppose there is a new \c TimeModel C++ class that should be made available -as a new QML type. It provides the current time through \c hour and \c minute -properties. It declares a QML type called \c Time via \l QML_NAMED_ELEMENT(). - -\snippet qmlextensionplugins/timemodel.h 0 -\dots - -To make this type available, we create a plugin class named \c QExampleQmlPlugin -which is a subclass of \l QQmlEngineExtensionPlugin. It uses the -Q_PLUGIN_METADATA() macro in the class definition to register the plugin with the -Qt meta object system using a unique identifier for the plugin. - -\snippet qmlextensionplugins/plugin.cpp plugin - -\section1 Project settings for the plugin - -Additionally, the project file (\c .pro) defines the project as a plugin library, -specifies it should be built into the \c imports/TimeExample directory, and registers -the plugin target name and various other details: - -\code -TEMPLATE = lib -CONFIG += qt plugin qmltypes -QT += qml - -QML_IMPORT_NAME = TimeExample -QML_IMPORT_MAJOR_VERSION = 1 - -DESTDIR = imports/$$QML_IMPORT_NAME -TARGET = qmlqtimeexampleplugin - -SOURCES += qexampleqmlplugin.cpp -\endcode - -This registers the \c TimeModel class with the import \c{TimeExample 1.0}, as -a QML type called \c Time. The \l{Defining QML Types from C++} article has more -information about registering C++ types for usage in QML. - -\section1 Plugin definition in the qmldir - -Finally, a \l{Module Definition qmldir Files}{qmldir file} is required -in the \c imports/TimeExample directory to describe the plugin and the types that it -exports. The plugin includes a \c Clock.qml file along with the \c qmlqtimeexampleplugin -that is built by the project (as shown above in the \c .pro file) so both of these -need to be specified in the \c qmldir file: - -\quotefile qmlextensionplugins/imports/TimeExample/qmldir - -To make things easier for this example, the TimeExample source directory is in -\c{imports/TimeExample}, and we build -\l{Source, Build, and Install Directories}{in-source}. However, the structure -of the source directory is not so important, as the \c qmldir file can specify -paths to installed QML files. - -What is important is the name of the directory that the qmldir is installed -into. When the user imports our module, the QML engine uses the -\l{Contents of a Module Definition qmldir File}{module identifier} -(\c TimeExample) to find the plugin, and so the directory in which it is -installed must match the module identifier. - -Once the project is built and installed, the new \c Time component is -accessible by any QML component that imports the \c TimeExample -module - -\snippet qmlextensionplugins/plugins.qml 0 - -The full source code is available in the \l {qmlextensionplugins}{plugins example}. |