diff options
Diffstat (limited to 'doc/src/qml/qmlplugins.qdoc')
-rw-r--r-- | doc/src/qml/qmlplugins.qdoc | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/doc/src/qml/qmlplugins.qdoc b/doc/src/qml/qmlplugins.qdoc new file mode 100644 index 0000000000..9b6fe29c1e --- /dev/null +++ b/doc/src/qml/qmlplugins.qdoc @@ -0,0 +1,133 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms +** and conditions contained in a signed written agreement between you +** and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +/*! +\page qml-plugins.html +\title QML Plugins +\target qml-plugins +\brief importing Qt C++ functions as plugins + + + The \l{The QML Engine}{QML engine} can run Qt C++ applications + by \l{register-c++-type}{registering} types into the runtime and by loading + C++ code as plugins. Plugins are imported and labeled as modules and + its content are available as components. + + QDeclarativeExtensionPlugin is a plugin interface that makes it possible to + 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. + + To write a QML extension plugin: + \list 1 + \o Subclass QDeclarativeExtensionPlugin + \o Implement QDeclarativeExtensionPlugin's + \l{QDeclarativeExtensionPlugin::}{registerTypes()} method + \o Register types with qmlRegisterType() + \o Export the class using the Q_EXPORT_PLUGIN2() macro + \o Write a project file for the plugin + \o Create a \l{Writing a qmldir file}{qmldir file} to describe the plugin + \endlist + + QML extension plugins are for either application-specific or library-like + 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. + +\section1 Plugin Example + + Suppose there is a new \c TimeModel C++ class that should be made available + as a new QML element. It provides the current time through \c hour and \c minute + properties. + + \snippet examples/declarative/cppextensions/plugins/plugin.cpp 0 + \dots + + A plugin class, \c QExampleQMLPlugin, is a subclass of + \l QDeclarativeExtensionPlugin and it implements the + \l{QDeclarativeExtensionPlugin::}{registerTypes()} method. + + In the registerTypes() method, the plugin class can + \l{register-c++-type}{register} the \c TimeModel class to the declarative + runtime with the qmlRegisterType() function. The Q_EXPORT_PLUGIN2() macro has + two parameters, the generated plugin name and the class name. + + \snippet examples/declarative/cppextensions/plugins/plugin.cpp plugin + \codeline + \snippet examples/declarative/cppextensions/plugins/plugin.cpp export + + The \c TimeModel class receives a \c{1.0} version of this plugin library, as + a QML type called \c Time. The Q_ASSERT() macro can ensure the module is + imported correctly by any QML components that use this plugin. The + \l{Creating QML Types} article has more information about registering C++ + types into the runtime. + + For this example, the TimeExample source directory is in + \c{com/nokia/TimeExample}. The plugin's module import statement will follow + this structure. + + The project file, in a \c .pro file, defines the project as a plugin library + and specifies it should be built into the \c com/nokia/TimeExample + directory: + + \code + TEMPLATE = lib + CONFIG += qt plugin + QT += declarative + + DESTDIR = com/nokia/TimeExample + TARGET = qmlqtimeexampleplugin + ... + \endcode + + Finally, a \l{Writing a qmldir file}{qmldir file} is required in the \c + com/nokia/TimeExample directory to specify the plugin. This directory + includes a \c Clock.qml file that should be bundled with the plugin, so it + needs to be specified in the \c qmldir file: + + \quotefile examples/declarative/cppextensions/plugins/com/nokia/TimeExample/qmldir + + Once the project is built and installed, the new \c Time component is + accessible by any QML component that imports the \c com.nokia.TimeExample + module + + \snippet examples/declarative/cppextensions/plugins/plugins.qml 0 + + The full source code is available in the \l {declarative/cppextensions/plugins}{plugins example}. + + +\section1 Reference + + \list + \o \l {Tutorial: Writing QML extensions with C++} - contains a chapter + on creating QML plugins. + \o \l{Creating QML Types} - information about registering C++ types into + the runtime. + \o \l{How to Create Qt Plugins} - information about Qt plugins + \endlist + + +*/ |