Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qqmltypescreator.cpp
Go to the documentation of this file.
1// Copyright (C) 2019 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
8
9#include <QtCore/qset.h>
10#include <QtCore/qcborarray.h>
11#include <QtCore/qcbormap.h>
12#include <QtCore/qsavefile.h>
13#include <QtCore/qfile.h>
14#include <QtCore/qversionnumber.h>
15
16#include <QtCore/private/qstringalgorithms_p.h>
17
19
20using namespace Qt::StringLiterals;
21using namespace Constants;
22using namespace Constants::DotQmltypes;
23using namespace QAnyStringViewUtils;
24
26{
27 // typical privateClass entry in MOC looks like: ClassName::d_func(), where
28 // ClassName is a non-private class name. we don't need "::d_func()" piece
29 // so that could be removed, but we need "Private" so that ClassName becomes
30 // ClassNamePrivate (at present, simply consider this correct)
31 return s.toString().replace("::d_func()"_L1, "Private"_L1);
32}
33
34void QmlTypesCreator::writeClassProperties(const QmlTypesClassDescription &collector)
35{
36 if (!collector.file.isEmpty())
37 m_qml.writeStringBinding(S_FILE, collector.file);
38 m_qml.writeStringBinding(S_NAME, collector.className);
39
40 if (!collector.accessSemantics.isEmpty())
42
43 if (!collector.defaultProp.isEmpty())
45
46 if (!collector.parentProp.isEmpty())
48
49 if (!collector.superClass.isEmpty())
51
52 if (!collector.sequenceValueType.isEmpty()) {
53 const QAnyStringView name = collector.sequenceValueType.back() == '*'_L1
54 ? collector.sequenceValueType.chopped(1)
55 : collector.sequenceValueType;
57 }
58
59 if (!collector.extensionType.isEmpty())
61
62 if (collector.extensionIsNamespace)
64
65 if (!collector.implementsInterfaces.isEmpty())
67
68 if (!collector.deferredNames.isEmpty())
70
71 if (!collector.immediateNames.isEmpty())
73
74 if (collector.elementName.isEmpty()) // e.g. if QML_ANONYMOUS
75 return;
76
77 if (!collector.sequenceValueType.isEmpty()) {
78 qWarning() << "Ignoring name of sequential container:" << collector.elementName.toString();
79 qWarning() << "Sequential containers are anonymous. Use QML_ANONYMOUS to register them.";
80 return;
81 }
82
83 QByteArrayList exports;
84 QByteArrayList metaObjects;
85
86 for (auto it = collector.revisions.begin(), end = collector.revisions.end(); it != end; ++it) {
87 const QTypeRevision revision = *it;
88 if (revision < collector.addedInRevision)
89 continue;
90 if (collector.removedInRevision.isValid() && !(revision < collector.removedInRevision))
91 break;
92 if (revision.hasMajorVersion() && revision.majorVersion() > m_version.majorVersion())
93 break;
94
95 QByteArray exportEntry = m_module + '/';
96 collector.elementName.visit([&](auto view) {
97 processAsUtf8(view, [&](QByteArrayView view) { exportEntry.append(view); });
98 });
99 exportEntry += ' ' + QByteArray::number(revision.hasMajorVersion()
100 ? revision.majorVersion()
101 : m_version.majorVersion());
102 exportEntry += '.' + QByteArray::number(revision.minorVersion());
103
104 exports.append(exportEntry);
105 metaObjects.append(QByteArray::number(revision.toEncodedVersion<quint16>()));
106 }
107
108 QList<QAnyStringView> exportStrings;
109 exportStrings.reserve(exports.length());
110 for (const QByteArray &entry: exports)
111 exportStrings.append(QUtf8StringView(entry));
112
113 m_qml.writeStringListBinding(S_EXPORTS, exportStrings);
114
115 if (!collector.isCreatable || collector.isSingleton)
117
118 if (collector.isStructured)
119 m_qml.writeScriptBinding(QLatin1String("isStructured"), QLatin1String("true"));
120
121 if (collector.isSingleton)
123
124 if (collector.hasCustomParser)
126
128
129 if (!collector.attachedType.isEmpty())
131}
132
133void QmlTypesCreator::writeType(const QCborMap &property, QLatin1StringView key)
134{
135 auto it = property.find(key);
136 if (it == property.end())
137 return;
138
140 if (type.isEmpty() || type == "void")
141 return;
142
143 bool isList = false;
144 bool isPointer = false;
145 // This is a best effort approach (like isPointer) and will not return correct results in the
146 // presence of typedefs.
147 bool isConstant = false;
148
149 auto handleList = [&](QAnyStringView list) {
150 if (!startsWith(type, list) || type.back() != '>'_L1)
151 return false;
152
153 const int listSize = list.size();
154 const QAnyStringView elementType = trimmed(type.mid(listSize, type.size() - listSize - 1));
155
156 // QQmlListProperty internally constructs the pointer. Passing an explicit '*' will
157 // produce double pointers. QList is only for value types. We can't handle QLists
158 // of pointers (unless specially registered, but then they're not isList).
159 if (elementType.back() == '*'_L1)
160 return false;
161
162 isList = true;
163 type = elementType;
164 return true;
165 };
166
167 if (!handleList("QQmlListProperty<"_L1) && !handleList("QList<"_L1)) {
168 if (type.back() == '*'_L1) {
169 isPointer = true;
170 type = type.chopped(1);
171 }
172 if (startsWith(type, "const "_L1)) {
173 isConstant = true;
174 type = type.sliced(strlen("const "));
175 }
176 }
177
178 if (type == "qreal") {
179#ifdef QT_COORD_TYPE_STRING
180 type = QT_COORD_TYPE_STRING;
181#else
182 type = "double";
183#endif
184 } else if (type == "qint16") {
185 type = "short";
186 } else if (type == "quint16") {
187 type = "ushort";
188 } else if (type == "qint32") {
189 type = "int";
190 } else if (type == "quint32") {
191 type = "uint";
192 } else if (type == "qint64") {
193 type = "qlonglong";
194 } else if (type == "quint64") {
195 type = "qulonglong";
196 } else if (type == "QList<QObject*>") {
197 type = "QObjectList";
198 }
199
201 if (isList)
202 m_qml.writeBooleanBinding(S_IS_LIST, true);
203 if (isPointer)
205 if (isConstant)
207}
208
209void QmlTypesCreator::writeProperties(const QCborArray &properties)
210{
211 for (const QCborValue &property : properties) {
212 const QCborMap obj = property.toMap();
217 if (it != obj.end())
218 m_qml.writeNumberBinding(S_REVISION, it.value().toInteger());
219
220 writeType(obj, MetatypesDotJson::S_TYPE);
221
222 const auto bindable = obj.constFind(MetatypesDotJson::S_BINDABLE);
223 if (bindable != obj.constEnd())
224 m_qml.writeStringBinding(S_BINDABLE, toStringView(bindable.value()));
225 const auto read = obj.constFind(MetatypesDotJson::S_READ);
226 if (read != obj.constEnd())
228 const auto write = obj.constFind(MetatypesDotJson::S_WRITE);
229 if (write != obj.constEnd())
231 const auto reset = obj.constFind(MetatypesDotJson::S_RESET);
232 if (reset != obj.constEnd())
234 const auto notify = obj.constFind(MetatypesDotJson::S_NOTIFY);
235 if (notify != obj.constEnd())
236 m_qml.writeStringBinding(S_NOTIFY, toStringView(notify.value()));
237 const auto index = obj.constFind(MetatypesDotJson::S_INDEX);
238 if (index != obj.constEnd()) {
239 m_qml.writeNumberBinding(S_INDEX, index.value().toInteger());
240 }
241 const auto privateClass = obj.constFind(MetatypesDotJson::S_PRIVATE_CLASS);
242 if (privateClass != obj.constEnd()) {
243 m_qml.writeStringBinding(
244 S_PRIVATE_CLASS, convertPrivateClassToUsableForm(privateClass.value()));
245 }
246
247 if (!obj.contains(MetatypesDotJson::S_WRITE) && !obj.contains(MetatypesDotJson::S_MEMBER))
249
250 const auto final = obj.constFind(MetatypesDotJson::S_FINAL);
251 if (final != obj.constEnd() && final->toBool())
252 m_qml.writeBooleanBinding(S_IS_FINAL, true);
253
254 const auto constant = obj.constFind(MetatypesDotJson::S_CONSTANT);
255 if (constant != obj.constEnd() && constant->toBool())
257
258 const auto required = obj.constFind(MetatypesDotJson::S_REQUIRED);
259 if (required != obj.constEnd() && required->toBool())
261
262 m_qml.writeEndObject();
263 }
264}
265
266void QmlTypesCreator::writeMethods(const QCborArray &methods, QLatin1StringView type)
267{
268 const auto writeFlag
270 const auto flag = obj.find(key);
271 if (flag != obj.constEnd() && flag->toBool())
272 m_qml.writeBooleanBinding(name, true);
273 };
274
275 for (const QCborValue &method : methods) {
276 const QCborMap obj = method.toMap();
278 if (name.isEmpty())
279 continue;
281 const auto revision = obj.find(MetatypesDotJson::S_REVISION);
282 m_qml.writeStartObject(type);
284 if (revision != obj.end())
285 m_qml.writeNumberBinding(S_REVISION, revision.value().toInteger());
287
291
292 for (qsizetype i = 0, end = arguments.size(); i != end; ++i) {
293 const QCborMap obj = arguments[i].toMap();
294 if (i == 0 && end == 1 && obj[MetatypesDotJson::S_TYPE] == QLatin1String("QQmlV4Function*")) {
296 break;
297 }
300 if (!name.isEmpty())
302 writeType(obj, MetatypesDotJson::S_TYPE);
303 m_qml.writeEndObject();
304 }
305 m_qml.writeEndObject();
306 }
307}
308
309void QmlTypesCreator::writeEnums(const QCborArray &enums)
310{
311 for (const QCborValue &item : enums) {
312 const QCborMap obj = item.toMap();
313 const QCborArray values = obj.value(MetatypesDotJson::S_VALUES).toArray();
314 QList<QAnyStringView> valueList;
315
316 for (const QCborValue &value : values)
317 valueList.append(toStringView(value));
318
321 auto alias = obj.find(MetatypesDotJson::S_ALIAS);
322 if (alias != obj.end())
323 m_qml.writeStringBinding(S_ALIAS, toStringView(alias.value()));
324 auto isFlag = obj.find(MetatypesDotJson::S_IS_FLAG);
325 if (isFlag != obj.end() && isFlag->toBool())
326 m_qml.writeBooleanBinding(S_IS_FLAG, true);
327 writeType(obj, MetatypesDotJson::S_TYPE);
328 m_qml.writeStringListBinding(S_VALUES, valueList);
329 m_qml.writeEndObject();
330 }
331}
332
333static bool isAllowedInMajorVersion(const QCborValue &member, QTypeRevision maxMajorVersion)
334{
335 const auto memberObject = member.toMap();
336 const auto it = memberObject.find(MetatypesDotJson::S_REVISION);
337 if (it == memberObject.end())
338 return true;
339
340 const QTypeRevision memberRevision = QTypeRevision::fromEncodedVersion(it->toInteger());
341 return !memberRevision.hasMajorVersion()
342 || memberRevision.majorVersion() <= maxMajorVersion.majorVersion();
343}
344
345template<typename Postprocess>
347 const QCborMap *classDef, QLatin1StringView key, QTypeRevision maxMajorVersion,
348 Postprocess &&process)
349{
350 QCborArray classDefMembers;
351
352 const QCborArray candidates = classDef->value(key).toArray();
353 for (QCborValue member : candidates) {
354 if (isAllowedInMajorVersion(member, maxMajorVersion))
355 classDefMembers.append(process(std::move(member)));
356 }
357
358 return classDefMembers;
359}
360
362 const QCborMap *classDef, QLatin1StringView key, QTypeRevision maxMajorVersion)
363{
364 return members(classDef, key, maxMajorVersion, [](QCborValue &&member) { return member; });
365}
366
368 const QCborMap *classDef, QLatin1StringView key, QTypeRevision maxMajorVersion)
369{
370 return members(classDef, key, maxMajorVersion, [](QCborValue &&member) {
371 QCborMap ctor = member.toMap();
373 return ctor;
374 });
375}
376
377
378void QmlTypesCreator::writeComponents()
379{
380 for (const QCborMap &component : m_ownTypes) {
381 QmlTypesClassDescription collector;
382 collector.collect(&component, m_ownTypes, m_foreignTypes,
384
385 if (collector.omitFromQmlTypes)
386 continue;
387
389
390 writeClassProperties(collector);
391
392 if (const QCborMap *classDef = collector.resolvedClass) {
393 writeEnums(members(classDef, MetatypesDotJson::S_ENUMS, m_version));
394
395 writeProperties(members(classDef, MetatypesDotJson::S_PROPERTIES, m_version));
396
397 writeMethods(members(classDef, MetatypesDotJson::S_SIGNALS, m_version), S_SIGNAL);
398 writeMethods(members(classDef, MetatypesDotJson::S_SLOTS, m_version), S_METHOD);
399 writeMethods(members(classDef, MetatypesDotJson::S_METHODS, m_version), S_METHOD);
400 writeMethods(constructors(classDef, MetatypesDotJson::S_CONSTRUCTORS, m_version), S_METHOD);
401 }
402 m_qml.writeEndObject();
403
404 if (collector.resolvedClass != &component
405 && std::binary_search(
406 m_referencedTypes.begin(), m_referencedTypes.end(),
408
409 // This type is referenced from elsewhere and has a QML_FOREIGN of its own. We need to
410 // also generate a description of the local type then. All the QML_* macros are
411 // ignored, and the result is an anonymous type.
412
414
415 QmlTypesClassDescription collector;
416 collector.collectLocalAnonymous(&component, m_ownTypes, m_foreignTypes, m_version);
417
418 writeClassProperties(collector);
419 writeEnums(members(&component, MetatypesDotJson::S_ENUMS, m_version));
420
421 writeProperties(members(&component, MetatypesDotJson::S_PROPERTIES, m_version));
422
423 writeMethods(members(&component, MetatypesDotJson::S_SIGNALS, m_version), S_SIGNAL);
424 writeMethods(members(&component, MetatypesDotJson::S_SLOTS, m_version), S_METHOD);
425 writeMethods(members(&component, MetatypesDotJson::S_METHODS, m_version), S_METHOD);
427
428 m_qml.writeEndObject();
429 }
430 }
431}
432
433bool QmlTypesCreator::generate(const QString &outFileName)
434{
435 m_qml.writeStartDocument();
436 m_qml.writeLibraryImport("QtQuick.tooling", 1, 2);
437 m_qml.write(
438 "\n// This file describes the plugin-supplied types contained in the library."
439 "\n// It is used for QML tooling purposes only."
440 "\n//"
441 "\n// This file was auto-generated by qmltyperegistrar.\n\n");
443
444 writeComponents();
445
446 m_qml.writeEndObject();
447
448 QSaveFile file(outFileName);
450 return false;
451
452 if (file.write(m_output) != m_output.size())
453 return false;
454
455 return file.commit();
456}
457
459
static JNINativeMethod methods[]
\inmodule QtCore
constexpr QChar back() const
Returns the last character in the string view.
Definition qstring.h:120
constexpr QAnyStringView sliced(qsizetype pos) const
QString toString() const
Returns a deep copy of this string view's data as a QString.
Definition qstring.h:1071
constexpr bool isEmpty() const noexcept
Returns whether this string view is empty - that is, whether {size() == 0}.
constexpr QAnyStringView chopped(qsizetype n) const
constexpr decltype(auto) visit(Visitor &&v) const
Calls v with either a QUtf8StringView, QLatin1String, or QStringView, depending on the encoding of th...
\inmodule QtCore
\inmodule QtCore
Definition qbytearray.h:57
qsizetype size() const noexcept
Returns the number of bytes in this byte array.
Definition qbytearray.h:474
static QByteArray number(int, int base=10)
Returns a byte-array representing the whole number n as text.
QByteArray & append(char c)
This is an overloaded member function, provided for convenience. It differs from the above function o...
\inmodule QtCore\reentrant
Definition qcborarray.h:20
void append(const QCborValue &value)
Definition qcborarray.h:170
\inmodule QtCore\reentrant
Definition qcbormap.h:21
QCborValue value(qint64 key) const
Returns the QCborValue element in this map that corresponds to key key, if there is one.
Definition qcbormap.h:169
\inmodule QtCore\reentrant
Definition qcborvalue.h:50
QCborArray toArray() const
QCborMap toMap() const
bool open(OpenMode flags) override
Opens the file using OpenMode mode, returning true if successful; otherwise false.
Definition qfile.cpp:881
qint64 write(const char *data, qint64 len)
Writes at most maxSize bytes of data from data to the device.
Definition qlist.h:74
qsizetype size() const noexcept
Definition qlist.h:386
bool isEmpty() const noexcept
Definition qlist.h:390
iterator end()
Definition qlist.h:609
iterator begin()
Definition qlist.h:608
void reserve(qsizetype size)
Definition qlist.h:746
void writeStringListBinding(QByteArrayView name, const QList< QAnyStringView > &elements)
void write(QByteArrayView data)
void writeLibraryImport(QByteArrayView uri, int majorVersion, int minorVersion, QByteArrayView as={})
void writeArrayBinding(QByteArrayView name, const QByteArrayList &elements)
void writeScriptBinding(QByteArrayView name, QByteArrayView rhs)
void writeStartObject(QByteArrayView component)
void writeBooleanBinding(QByteArrayView name, bool value)
void writeStringBinding(QByteArrayView name, QAnyStringView value)
void writeNumberBinding(QByteArrayView name, qint64 value)
\inmodule QtCore
Definition qsavefile.h:24
iterator end()
Definition qset.h:140
iterator find(const T &value)
Definition qset.h:159
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
QString & replace(qsizetype i, qsizetype len, QChar after)
Definition qstring.cpp:3794
\inmodule QtCore
static constexpr QTypeRevision fromEncodedVersion(Integer value)
Produces a QTypeRevision from the given value.
constexpr bool hasMajorVersion() const
Returns true if the major version is known, otherwise false.
constexpr Integer toEncodedVersion() const
Transforms the revision into an integer value, encoding the minor version into the least significant ...
constexpr quint8 minorVersion() const
Returns the minor version encoded in the revision.
constexpr bool isValid() const
Returns true if the major version or the minor version is known, otherwise false.
constexpr quint8 majorVersion() const
Returns the major version encoded in the revision.
bool generate(const QString &outFileName)
list append(new Employee("Blackpool", "Stephen"))
QSet< QString >::iterator it
QList< QVariant > arguments
static constexpr QLatin1StringView S_FILE
static constexpr QLatin1StringView S_NOTIFY
static constexpr QLatin1StringView S_SIGNAL
static constexpr QLatin1StringView S_IS_SINGLETON
static constexpr QLatin1StringView S_IS_CONSTRUCTOR
static constexpr QLatin1StringView S_ACCESS_SEMANTICS
static constexpr QLatin1StringView S_IS_READONLY
static constexpr QLatin1StringView S_ENUM
static constexpr QLatin1StringView S_READ
static constexpr QLatin1StringView S_VALUE_TYPE
static constexpr QLatin1StringView S_PROPERTY
static constexpr QLatin1StringView S_INDEX
static constexpr QLatin1StringView S_IS_CREATABLE
static constexpr QLatin1StringView S_RESET
static constexpr QLatin1StringView S_TYPE
static constexpr QLatin1StringView S_MODULE
static constexpr QLatin1StringView S_PARAMETER
static constexpr QLatin1StringView S_IS_LIST
static constexpr QLatin1StringView S_IS_CLONED
static constexpr QLatin1StringView S_IS_REQUIRED
static constexpr QLatin1StringView S_IMMEDIATE_NAMES
static constexpr QLatin1StringView S_WRITE
static constexpr QLatin1StringView S_IS_JAVASCRIPT_FUNCTION
static constexpr QLatin1StringView S_EXPORTS
static constexpr QLatin1StringView S_REVISION
static constexpr QLatin1StringView S_DEFAULT_PROPERTY
static constexpr QLatin1StringView S_DEFERRED_NAMES
static constexpr QLatin1StringView S_METHOD
static constexpr QLatin1StringView S_IS_POINTER
static constexpr QLatin1StringView S_ALIAS
static constexpr QLatin1StringView S_VALUES
static constexpr QLatin1StringView S_IS_FLAG
static constexpr QLatin1StringView S_COMPONENT
static constexpr QLatin1StringView S_PROTOTYPE
static constexpr QLatin1StringView S_EXPORT_META_OBJECT_REVISIONS
static constexpr QLatin1StringView S_ATTACHED_TYPE
static constexpr QLatin1StringView S_IS_FINAL
static constexpr QLatin1StringView S_HAS_CUSTOM_PARSER
static constexpr QLatin1StringView S_PARENT_PROPERTY
static constexpr QLatin1StringView S_IS_CONSTANT
static constexpr QLatin1StringView S_PRIVATE_CLASS
static constexpr QLatin1StringView S_EXTENSION_IS_NAMESPACE
static constexpr QLatin1StringView S_BINDABLE
static constexpr QLatin1StringView S_EXTENSION
static constexpr QLatin1StringView S_NAME
static constexpr QLatin1StringView S_INTERFACES
static constexpr QLatin1StringView S_SIGNALS
static constexpr QLatin1StringView S_QUALIFIED_CLASS_NAME
static constexpr QLatin1StringView S_NAME
static constexpr QLatin1StringView S_TYPE
static constexpr QLatin1StringView S_CONSTRUCTORS
static constexpr QLatin1StringView S_PRIVATE_CLASS
static constexpr QLatin1StringView S_ARGUMENTS
static constexpr QLatin1StringView S_CONSTANT
static constexpr QLatin1StringView S_ALIAS
static constexpr QLatin1StringView S_REQUIRED
static constexpr QLatin1StringView S_IS_JAVASCRIPT_FUNCTION
static constexpr QLatin1StringView S_NOTIFY
static constexpr QLatin1StringView S_RETURN_TYPE
static constexpr QLatin1StringView S_RESET
static constexpr QLatin1StringView S_MEMBER
static constexpr QLatin1StringView S_IS_CONSTRUCTOR
static constexpr QLatin1StringView S_REVISION
static constexpr QLatin1StringView S_SLOTS
static constexpr QLatin1StringView S_PROPERTIES
static constexpr QLatin1StringView S_IS_CLONED
static constexpr QLatin1StringView S_VALUES
static constexpr QLatin1StringView S_READ
static constexpr QLatin1StringView S_FINAL
static constexpr QLatin1StringView S_ENUMS
static constexpr QLatin1StringView S_IS_FLAG
static constexpr QLatin1StringView S_INDEX
static constexpr QLatin1StringView S_WRITE
static constexpr QLatin1StringView S_METHODS
static constexpr QLatin1StringView S_BINDABLE
bool startsWith(QAnyStringView whole, QAnyStringView part)
QAnyStringView toStringView(const QCborValue &value)
QAnyStringView trimmed(QAnyStringView string)
auto processAsUtf8(StringView string, Handler &&handler)
Combined button and popup list for selecting options.
static const QCssKnownValue properties[NumProperties - 1]
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char * method
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
#define qWarning
Definition qlogging.h:162
GLenum GLsizei GLsizei GLint * values
[15]
GLuint64 key
GLuint index
[2]
GLuint GLuint end
GLenum type
GLuint name
GLhandleARB obj
[2]
GLboolean reset
GLuint entry
GLdouble s
[6]
Definition qopenglext.h:235
static qreal component(const QPointF &point, unsigned int i)
QCborArray members(const QCborMap *classDef, QLatin1StringView key, QTypeRevision maxMajorVersion, Postprocess &&process)
static bool isAllowedInMajorVersion(const QCborValue &member, QTypeRevision maxMajorVersion)
static QCborArray constructors(const QCborMap *classDef, QLatin1StringView key, QTypeRevision maxMajorVersion)
static QString convertPrivateClassToUsableForm(const QCborValue &s)
QLatin1StringView QLatin1String
Definition qstringfwd.h:31
unsigned short quint16
Definition qtypes.h:43
ptrdiff_t qsizetype
Definition qtypes.h:70
ReturnedValue read(const char *data)
static const QV4::Value & constant(Function *function, int index)
const char property[13]
Definition qwizard.cpp:101
QList< int > list
[14]
QFile file
[0]
gzip write("uncompressed data")
QGraphicsItem * item
QQuickView * view
[0]
void collectLocalAnonymous(const QCborMap *classDef, const QVector< QCborMap > &types, const QVector< QCborMap > &foreign, QTypeRevision defaultRevision)
QList< QAnyStringView > implementsInterfaces
QList< QAnyStringView > immediateNames
void collect(const QCborMap *classDef, const QVector< QCborMap > &types, const QVector< QCborMap > &foreign, CollectMode mode, QTypeRevision defaultRevision)
QList< QAnyStringView > deferredNames