aboutsummaryrefslogtreecommitdiffstats
path: root/doc/src/qml/qmlplugins.qdoc
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/qml/qmlplugins.qdoc')
-rw-r--r--doc/src/qml/qmlplugins.qdoc133
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
+
+
+*/