aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/doc/src/qmllanguageref/modules/cppplugins.qdoc
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/doc/src/qmllanguageref/modules/cppplugins.qdoc')
-rw-r--r--src/qml/doc/src/qmllanguageref/modules/cppplugins.qdoc136
1 files changed, 136 insertions, 0 deletions
diff --git a/src/qml/doc/src/qmllanguageref/modules/cppplugins.qdoc b/src/qml/doc/src/qmllanguageref/modules/cppplugins.qdoc
new file mode 100644
index 0000000000..7ac1d400eb
--- /dev/null
+++ b/src/qml/doc/src/qmllanguageref/modules/cppplugins.qdoc
@@ -0,0 +1,136 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:FDL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Free Documentation License Usage
+** 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. Please review the following information to ensure
+** the GNU Free Documentation License version 1.3 requirements
+** will be met: http://www.gnu.org/copyleft/fdl.html.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+\page qtqml-modules-cppplugins.html
+\title Creating C++ Plugins for QML
+\brief Description of how to write C++ plugins for QML
+
+\section1 Creating a Plugin
+
+ The \l{QQmlEngine}{QML engine} load C++ plugins for QML.
+ Such plugins are usually provided in a QML extension module, and can
+ provide types and functionality for use by clients in QML documents
+ which import the module.
+
+ QQmlExtensionPlugin 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
+ \li Subclass QQmlExtensionPlugin
+ \list
+ \li Use the Q_PLUGIN_METADATA() macro to register the plugin with
+ the Qt meta object system
+ \li Override the \l{QQmlExtensionPlugin::}{registerTypes()} method
+ and call qmlRegisterType() to register the types to be exported
+ by the plugin
+ \endlist
+ \li Write a project file for the plugin
+ \li Create a \l{Module Definition qmldir Files}{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 type. It provides the current time through \c hour and \c minute
+ properties.
+
+ \snippet plugins/plugin.cpp 0
+ \dots
+
+ To make this type available, we create a plugin class named \c QExampleQmlPlugin
+ which is a subclass of \l QQmlExtensionPlugin. It overrides the
+ \l{QQmlExtensionPlugin::}{registerTypes()} method in order to register the \c TimeModel
+ type using qmlRegisterType(). It also 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 plugins/plugin.cpp plugin
+
+ 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 type namespace is
+ imported correctly by any QML components that use this plugin. The
+ \l{Defining QML Types from C++} article has more information about registering C++
+ types into the runtime.
+
+ For this example, the TimeExample source directory is in
+ \c{imports/TimeExample}. The plugin's type namespace will mirror
+ this structure, so the types are registered into the namespace
+ "TimeExample".
+
+ Additionally, the project file, in a \c .pro file, 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
+ QT += qml
+
+ DESTDIR = imports/TimeExample
+ TARGET = qmlqtimeexampleplugin
+ SOURCES += qexampleqmlplugin.cpp
+ \endcode
+
+ 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 plugins/imports/TimeExample/qmldir
+
+ 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 plugins/plugins.qml 0
+
+ The full source code is available in the \l {qml/plugins}{plugins example}.
+
+
+\section1 Reference
+
+ \list
+ \li \l {Writing QML Extensions with C++} - contains a chapter
+ on creating QML plugins.
+ \li \l{Defining QML Types from C++} - information about registering C++ types into
+ the runtime.
+ \li \l{How to Create Qt Plugins} - information about Qt plugins
+ \endlist
+
+
+*/