Update copyright headers
[qt:qt.git] / doc / src / declarative / qtdeclarative.qdoc
1 /****************************************************************************
2 **
3 ** Copyright (C) 2015 The Qt Company Ltd.
4 ** Contact: http://www.qt.io/licensing/
5 **
6 ** This file is part of the documentation of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:FDL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see http://www.qt.io/terms-conditions. For further
15 ** information use the contact form at http://www.qt.io/contact-us.
16 **
17 ** GNU Free Documentation License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Free
19 ** Documentation License version 1.3 as published by the Free Software
20 ** Foundation and appearing in the file included in the packaging of
21 ** this file.  Please review the following information to ensure
22 ** the GNU Free Documentation License version 1.3 requirements
23 ** will be met: http://www.gnu.org/copyleft/fdl.html.
24 ** $QT_END_LICENSE$
25 **
26 ****************************************************************************/
27
28 /*!
29   \module QtDeclarative
30   \title Qt Declarative Module
31   \ingroup modules
32
33   \brief The Qt Declarative module provides a declarative framework
34   for building highly dynamic, custom user interfaces.
35
36   To include the definitions of the module's classes, use the
37   following directive:
38
39   \code
40   #include <QtDeclarative>
41   \endcode
42
43   To link against the module, add this line to your \l qmake \c
44   .pro file:
45
46   \code
47   QT += declarative
48   \endcode
49
50   For more information on the Qt Declarative module, see the
51   \l{Qt Quick} documentation.
52 */
53
54
55 /*!
56   \macro QML_DECLARE_TYPE()
57   \relates QDeclarativeEngine
58
59   Equivalent to \c Q_DECLARE_METATYPE(TYPE *) and \c Q_DECLARE_METATYPE(QDeclarativeListProperty<TYPE>)
60
61   #include <QtDeclarative> to use this macro.
62 */
63
64 /*!
65   \macro QML_DECLARE_TYPEINFO(Type,Flags)
66   \relates QDeclarativeEngine
67
68   Declares additional properties of the given \a Type as described by the
69   specified \a Flags.
70   
71   Current the only supported type info is \c QML_HAS_ATTACHED_PROPERTIES which
72   declares that the \a Type supports \l {Attached Properties}.
73
74   #include <QtDeclarative> to use this macro.
75 */
76
77
78 /*!
79   \fn int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName)
80   \relates QDeclarativeEngine
81
82   This template function registers the C++ type in the QML system with
83   the name \a qmlName, in the library imported from \a uri having the
84   version number composed from \a versionMajor and \a versionMinor.
85
86   Returns the QML type id.
87
88   There are two forms of this template function:
89
90   \code
91   template<typename T>
92   int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName);
93
94   template<typename T, int metaObjectRevision>
95   int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName);
96   \endcode
97
98   The former is the standard form which registers the type \e T as a new type.
99   The latter allows a particular revision of a class to be registered in
100   a specified version (see \l {QML Type Versioning}).
101
102
103   For example, this registers a C++ class \c MySliderItem as a QML type
104   named \c Slider for version 1.0 of a \l{QML Modules}{module} called
105   "com.mycompany.qmlcomponents":
106
107   \code
108   #include <QtDeclarative>
109
110   ...
111
112   qmlRegisterType<MySliderItem>("com.mycompany.qmlcomponents", 1, 0, "Slider");
113   \endcode
114
115   Once this is registered, the type can be used in QML by importing the 
116   specified module name and version number:
117
118   \qml
119   import com.mycompany.qmlcomponents 1.0
120
121   Slider {
122       // ...
123   }
124   \endqml
125
126   Note that it's perfectly reasonable for a library to register types to older versions
127   than the actual version of the library. Indeed, it is normal for the new library to allow
128   QML written to previous versions to continue to work, even if more advanced versions of
129   some of its types are available.
130 */
131
132 /*!
133   \fn int qmlRegisterUncreatableType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString& message)
134   \relates QDeclarativeEngine
135
136   This template function registers the C++ type in the QML system with
137   the name \a qmlName, in the library imported from \a uri having the
138   version number composed from \a versionMajor and \a versionMinor.
139
140   While the type has a name and a type, it cannot be created, and the
141   given error \a message will result if creation is attempted.
142
143   This is useful where the type is only intended for providing attached properties or enum values.
144
145   Returns the QML type id.
146
147   #include <QtDeclarative> to use this function.
148
149   \sa qmlRegisterTypeNotAvailable()
150 */
151
152 /*!
153   \fn int qmlRegisterTypeNotAvailable(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString& message)
154   \relates QDeclarativeEngine
155
156   This function registers a type in the QML system with the name \a qmlName, in the library imported from \a uri having the
157   version number composed from \a versionMajor and \a versionMinor, but any attempt to instantiate the type
158   will produce the given error \a message.
159
160   Normally, the types exported by a module should be fixed. However, if a C++ type is not available, you should
161   at least "reserve" the QML type name, and give the user of your module a meaningful error message.
162
163   Returns the QML type id.
164
165   Example:
166
167   \code
168   #ifdef NO_GAMES_ALLOWED
169   qmlRegisterTypeNotAvailable("MinehuntCore", 0, 1, "Game", "Get back to work, slacker!");
170   #else
171   qmlRegisterType<MinehuntGame>("MinehuntCore", 0, 1, "Game");
172   #endif
173   \endcode
174
175   This will cause any QML which uses this module and attempts to use the type to produce an error message:
176   \code
177   fun.qml: Get back to work, slacker!
178      Game {
179      ^
180   \endcode
181
182   Without this, a generic "Game is not a type" message would be given.
183
184   #include <QtDeclarative> to use this function.
185
186   \sa qmlRegisterUncreatableType()
187 */
188
189 /*!
190   \fn int qmlRegisterType()
191   \relates QDeclarativeEngine
192   \overload
193
194   This template function registers the C++ type in the QML
195   system. Instances of this type cannot be created from the QML
196   system.
197
198   #include <QtDeclarative> to use this function.
199
200   Returns the QML type id.
201 */
202
203 /*!
204   \fn int qmlRegisterInterface(const char *typeName)
205   \relates QDeclarativeEngine
206
207   This template function registers the C++ type in the QML system
208   under the name \a typeName.
209
210   #include <QtDeclarative> to use this function.
211
212   Returns the QML type id.
213 */