Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qqmlintegration.h
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QMLINTEGRATION_H
5#define QMLINTEGRATION_H
6
7#include <QtCore/qglobal.h>
8
9// forward declarations of structs and functions defined in QtQml
11namespace QQmlPrivate {
12 template<typename, typename> struct QmlSingleton;
13 template<class, class, bool> struct QmlAttached;
14 template<class> struct QmlAttachedAccessor;
15 template<class, class> struct QmlExtended;
16 template<typename, typename> struct QmlInterface;
17 template<class, class>
18 struct QmlExtendedNamespace;
19 template<class, class>
20 struct QmlUncreatable;
21 template<class, class>
22 struct QmlAnonymous;
23 template<class, class>
24 struct QmlSequence;
25 template<class, class>
26 struct QmlResolved;
27}
28
29template <typename T> class QList;
30
31template<typename... Args>
32void qmlRegisterTypesAndRevisions(const char *uri, int versionMajor,
33 QList<int> *qmlTypeIds = nullptr);
34
36
37
38#define QML_PRIVATE_NAMESPACE \
39 QT_PREPEND_NAMESPACE(QQmlPrivate)
40
41#define QML_REGISTER_TYPES_AND_REVISIONS \
42 QT_PREPEND_NAMESPACE(qmlRegisterTypesAndRevisions)
43
44
45#define QML_ELEMENT \
46 Q_CLASSINFO("QML.Element", "auto")
47
48
49#define QML_ANONYMOUS \
50 Q_CLASSINFO("QML.Element", "anonymous") \
51 enum class QmlIsAnonymous{yes = true}; \
52 template<typename, typename> friend struct QML_PRIVATE_NAMESPACE::QmlAnonymous; \
53 QT_WARNING_PUSH \
54 QT_WARNING_DISABLE_GCC("-Wredundant-decls") \
55 template<typename... Args> \
56 friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QList<int> *); \
57 QT_WARNING_POP \
58 inline constexpr void qt_qmlMarker_anonymous() {}
59
60#define QML_NAMED_ELEMENT(NAME) \
61 Q_CLASSINFO("QML.Element", #NAME)
62
63#define QML_UNCREATABLE(REASON) \
64 Q_CLASSINFO("QML.Creatable", "false") \
65 Q_CLASSINFO("QML.UncreatableReason", REASON) \
66 enum class QmlIsUncreatable {yes = true}; \
67 template<typename, typename> friend struct QML_PRIVATE_NAMESPACE::QmlUncreatable; \
68 QT_WARNING_PUSH \
69 QT_WARNING_DISABLE_GCC("-Wredundant-decls") \
70 template<typename... Args> \
71 friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QList<int> *); \
72 QT_WARNING_POP \
73 inline constexpr void qt_qmlMarker_uncreatable() {}
74
75#define QML_VALUE_TYPE(NAME) \
76 Q_CLASSINFO("QML.Element", #NAME)
77
78#define QML_CONSTRUCTIBLE_VALUE \
79 Q_CLASSINFO("QML.Creatable", "true") \
80 Q_CLASSINFO("QML.CreationMethod", "construct")
81
82#define QML_STRUCTURED_VALUE \
83 Q_CLASSINFO("QML.Creatable", "true") \
84 Q_CLASSINFO("QML.CreationMethod", "structured")
85
86#define QML_SINGLETON \
87 Q_CLASSINFO("QML.Singleton", "true") \
88 enum class QmlIsSingleton {yes = true}; \
89 template<typename, typename> friend struct QML_PRIVATE_NAMESPACE::QmlSingleton; \
90 QT_WARNING_PUSH \
91 QT_WARNING_DISABLE_GCC("-Wredundant-decls") \
92 template<typename... Args> \
93 friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QList<int> *); \
94 QT_WARNING_POP \
95 inline constexpr void qt_qmlMarker_singleton() {}
96
97#define QML_ADDED_IN_MINOR_VERSION(VERSION) \
98 Q_CLASSINFO("QML.AddedInVersion", Q_REVISION(VERSION))
99
100#define QML_ADDED_IN_VERSION(MAJOR, MINOR) \
101 Q_CLASSINFO("QML.AddedInVersion", Q_REVISION(MAJOR, MINOR))
102
103#define QML_EXTRA_VERSION(MAJOR, MINOR) \
104 Q_CLASSINFO("QML.ExtraVersion", Q_REVISION(MAJOR, MINOR))
105
106#define QML_REMOVED_IN_MINOR_VERSION(VERSION) \
107 Q_CLASSINFO("QML.RemovedInVersion", Q_REVISION(VERSION))
108
109#define QML_REMOVED_IN_VERSION(MAJOR, MINOR) \
110 Q_CLASSINFO("QML.RemovedInVersion", Q_REVISION(MAJOR, MINOR))
111
112#define QML_ATTACHED(ATTACHED_TYPE) \
113 Q_CLASSINFO("QML.Attached", #ATTACHED_TYPE) \
114 using QmlAttachedType = ATTACHED_TYPE; \
115 template<class, class, bool> friend struct QML_PRIVATE_NAMESPACE::QmlAttached; \
116 template<class> friend struct QML_PRIVATE_NAMESPACE::QmlAttachedAccessor; \
117 inline constexpr void qt_qmlMarker_attached() {}
118
119#define QML_EXTENDED(EXTENDED_TYPE) \
120 Q_CLASSINFO("QML.Extended", #EXTENDED_TYPE) \
121 using QmlExtendedType = EXTENDED_TYPE; \
122 template<class, class> friend struct QML_PRIVATE_NAMESPACE::QmlExtended; \
123 QT_WARNING_PUSH \
124 QT_WARNING_DISABLE_GCC("-Wredundant-decls") \
125 template<typename... Args> \
126 friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QList<int> *); \
127 QT_WARNING_POP \
128 inline constexpr void qt_qmlMarker_extended() {}
129
130#define QML_EXTENDED_NAMESPACE(EXTENDED_NAMESPACE) \
131 Q_CLASSINFO("QML.Extended", #EXTENDED_NAMESPACE) \
132 Q_CLASSINFO("QML.ExtensionIsNamespace", "true") \
133 static constexpr const QMetaObject *qmlExtendedNamespace() { return &EXTENDED_NAMESPACE::staticMetaObject; } \
134 template<class, class> friend struct QML_PRIVATE_NAMESPACE::QmlExtendedNamespace; \
135 QT_WARNING_PUSH \
136 QT_WARNING_DISABLE_GCC("-Wredundant-decls") \
137 template<typename... Args> \
138 friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QList<int> *); \
139 QT_WARNING_POP \
140 inline constexpr void qt_qmlMarker_extendedNamespace() {}
141
142#define QML_NAMESPACE_EXTENDED(EXTENDED_NAMESPACE) \
143 Q_CLASSINFO("QML.Extended", #EXTENDED_NAMESPACE)
144
145#define QML_INTERFACE \
146 Q_CLASSINFO("QML.Element", "anonymous") \
147 enum class QmlIsInterface {yes = true}; \
148 template<typename, typename> friend struct QML_PRIVATE_NAMESPACE::QmlInterface; \
149 QT_WARNING_PUSH \
150 QT_WARNING_DISABLE_GCC("-Wredundant-decls") \
151 template<typename... Args> \
152 friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QList<int> *); \
153 QT_WARNING_POP \
154 inline constexpr void qt_qmlMarker_interface() {}
155
156#define QML_IMPLEMENTS_INTERFACES(INTERFACES) \
157 Q_INTERFACES(INTERFACES) \
158 enum class QmlIsInterface {yes = false}; \
159 template<typename, typename> friend struct QML_PRIVATE_NAMESPACE::QmlInterface;
160
161#define QML_SEQUENTIAL_CONTAINER(VALUE_TYPE) \
162 Q_CLASSINFO("QML.Sequence", #VALUE_TYPE) \
163 using QmlSequenceValueType = VALUE_TYPE; \
164 enum class QmlIsSequence {yes = true}; \
165 template<typename, typename> friend struct QML_PRIVATE_NAMESPACE::QmlSequence; \
166 QT_WARNING_PUSH \
167 QT_WARNING_DISABLE_GCC("-Wredundant-decls") \
168 template<typename... Args> \
169 friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QList<int> *); \
170 QT_WARNING_POP \
171 inline constexpr void qt_qmlMarker_sequence() {}
172
173#define QML_UNAVAILABLE \
174 QML_FOREIGN(QQmlTypeNotAvailable)
175
176#define QML_FOREIGN(FOREIGN_TYPE) \
177 Q_CLASSINFO("QML.Foreign", #FOREIGN_TYPE) \
178 using QmlForeignType = FOREIGN_TYPE; \
179 template<class, class> friend struct QML_PRIVATE_NAMESPACE::QmlResolved; \
180 QT_WARNING_PUSH \
181 QT_WARNING_DISABLE_GCC("-Wredundant-decls") \
182 template<typename... Args> \
183 friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QList<int> *); \
184 QT_WARNING_POP \
185 inline constexpr void qt_qmlMarker_foreign() {}
186
187#define QML_FOREIGN_NAMESPACE(FOREIGN_NAMESPACE) \
188 Q_CLASSINFO("QML.Foreign", #FOREIGN_NAMESPACE) \
189 Q_CLASSINFO("QML.ForeignIsNamespace", "true") \
190 inline constexpr void qt_qmlMarker_foreign() {}
191
192#define QML_CUSTOMPARSER \
193 Q_CLASSINFO("QML.HasCustomParser", "true")
194
195#endif
Definition qlist.h:75
Combined button and popup list for selecting options.
void qmlRegisterTypesAndRevisions(const char *uri, int versionMajor, QList< int > *qmlTypeIds=nullptr)
Definition qqml.h:914