6#include <private/qqmlextensionplugin_p.h>
7#include <private/qqmlmetatypedata_p.h>
8#include <private/qqmlpropertycachecreator_p.h>
9#include <private/qqmltype_p_p.h>
10#include <private/qqmltypeloader_p.h>
11#include <private/qqmltypemodule_p.h>
12#include <private/qqmlvaluetype_p.h>
13#include <private/qv4executablecompilationunit_p.h>
15#include <QtCore/qcoreapplication.h>
16#include <QtCore/qmutex.h>
17#include <QtCore/qloggingcategory.h>
35 ModuleUri(
const std::unique_ptr<QQmlTypeModule> &module) :
QString(module->module()) {}
56 QMutexLocker<QRecursiveMutex> locker;
64 d->extraData.interfaceTypeData =
type.iid;
65 d->typeId =
type.typeId;
66 d->listId =
type.listId;
68 d->version =
type.version;
69 data->registerType(
d);
79 data->registerType(
d);
82 d->version =
type.version;
84 if (
type.qObjectApi) {
85 d->baseMetaObject =
type.instanceMetaObject;
86 d->typeId =
type.typeId;
87 d->revision =
type.revision;
90 d->extraData.singletonTypeData->singletonInstanceInfo = siinfo;
91 d->extraData.singletonTypeData->extFunc =
type.extensionObjectCreate;
92 d->extraData.singletonTypeData->extMetaObject =
type.extensionMetaObject;
101 data->registerType(
d);
104 d->version =
type.version;
105 d->revision =
type.revision;
106 d->typeId =
type.typeId;
107 d->listId =
type.listId;
108 d->extraData.cppTypeData->allocationSize =
type.objectSize;
109 d->extraData.cppTypeData->userdata =
type.userdata;
110 d->extraData.cppTypeData->newFunc =
type.create;
111 d->extraData.cppTypeData->noCreationReason =
type.noCreationReason;
112 d->extraData.cppTypeData->createValueTypeFunc =
type.createValueType;
113 d->baseMetaObject =
type.metaObject;
114 d->extraData.cppTypeData->attachedPropertiesFunc =
type.attachedPropertiesFunction;
115 d->extraData.cppTypeData->attachedPropertiesType =
type.attachedPropertiesMetaObject;
116 d->extraData.cppTypeData->parserStatusCast =
type.parserStatusCast;
117 d->extraData.cppTypeData->propertyValueSourceCast =
type.valueSourceCast;
118 d->extraData.cppTypeData->propertyValueInterceptorCast =
type.valueInterceptorCast;
122 d->extraData.cppTypeData->extFunc =
type.extensionObjectCreate;
124 d->extraData.cppTypeData->registerEnumClassesUnscoped =
true;
125 d->extraData.cppTypeData->registerEnumsFromRelatedTypes =
true;
131 if (
type.extensionMetaObject)
132 d->extraData.cppTypeData->extMetaObject =
type.extensionMetaObject;
135 if (
d->baseMetaObject) {
136 auto indexOfUnscoped =
d->baseMetaObject->indexOfClassInfo(
"RegisterEnumClassesUnscoped");
137 if (indexOfUnscoped != -1
138 &&
qstrcmp(
d->baseMetaObject->classInfo(indexOfUnscoped).value(),
"false") == 0) {
139 d->extraData.cppTypeData->registerEnumClassesUnscoped =
false;
142 auto indexOfRelated =
d->baseMetaObject->indexOfClassInfo(
"RegisterEnumsFromRelatedTypes");
143 if (indexOfRelated != -1
144 &&
qstrcmp(
d->baseMetaObject->classInfo(indexOfRelated).value(),
"false") == 0) {
145 d->extraData.cppTypeData->registerEnumsFromRelatedTypes =
false;
165 priv->typeId = ptr_type;
166 priv->listId = lst_type;
177 data->registerType(
d);
179 d->version =
type.version;
194 data->registerType(
d);
197 d->version =
type.version;
199 d->extraData.singletonTypeData->singletonInstanceInfo = siinfo;
211 for (
int ii =
mo->classInfoOffset(); ii <
mo->classInfoCount(); ++ii) {
214 int otherIndex = ignoreEnd->indexOfClassInfo(
info.name());
215 if (otherIndex >= ignoreStart->classInfoOffset() + ignoreStart->classInfoCount()) {
224 for (
int ii =
mo->methodOffset(); ii <
mo->methodCount(); ++ii) {
232 for (
int ii = ignoreStart->methodOffset() + ignoreStart->methodCount();
233 !found && ii < ignoreEnd->methodOffset() + ignoreEnd->methodCount(); ++ii) {
246 for (
int ii =
mo->propertyOffset(); ii <
mo->propertyCount(); ++ii) {
249 int otherIndex = ignoreEnd->indexOfProperty(
property.name());
250 if (otherIndex >= ignoreStart->propertyOffset() + ignoreStart->propertyCount()) {
261 for (
int ii =
mo->enumeratorOffset(); ii <
mo->enumeratorCount(); ++ii) {
264 int otherIndex = ignoreEnd->indexOfEnumerator(enumerator.
name());
265 if (otherIndex >= ignoreStart->enumeratorOffset() + ignoreStart->enumeratorCount()) {
276 if (
data->moduleTypeRegistrationFunctions.contains(uri))
279 data->moduleTypeRegistrationFunctions.insert(uri, registerFunction);
289 if (!
data->moduleTypeRegistrationFunctions.contains(uri))
292 data->moduleTypeRegistrationFunctions.remove(uri);
308 data->idToType.clear();
309 data->nameToType.clear();
310 data->urlToType.clear();
311 data->typePropertyCaches.clear();
312 data->urlToNonFileImportType.clear();
313 data->metaObjectToType.clear();
314 data->undeletableTypes.clear();
315 data->propertyCaches.clear();
316 data->inlineComponentTypes.clear();
320 emptyComposites.
swap(
data->compositeTypes);
333 if (function.structVersion > 1)
334 qFatal(
"qmlRegisterType(): Cannot mix incompatible QML versions.");
340 return data->parentFunctions.size() - 1;
351 if (
type.structVersion > 1)
352 qFatal(
"qmlRegisterType(): Cannot mix incompatible QML versions.");
362 data->interfaces.insert(
type.typeId.id());
400 "Invalid QML %1 name \"%2\"; "
401 "value type names should begin with a lowercase letter")
409 for (
int ii = 0; ii < typeNameLen; ++ii) {
424 "Cannot install %1 '%2' into protected module '%3' version '%4'"));
425 data->recordTypeRegFailure(failure
441 return data->addTypeModule(std::make_unique<QQmlTypeModule>(uri, version.
majorVersion()));
449 if (!
type->elementName.isEmpty())
452 if (
type->baseMetaObject)
453 data->metaObjectToType.insert(
type->baseMetaObject,
type);
456 if (
type->listId.isValid())
459 if (
type->typeId.isValid())
466 if (!
type->module.isEmpty()) {
478 qFatal(
"qmlRegisterType(): Cannot mix incompatible QML versions.");
498 if (
type.structVersion > 1)
499 qFatal(
"qmlRegisterType(): Cannot mix incompatible QML versions.");
520 if (
type.structVersion > 1)
521 qFatal(
"qmlRegisterType(): Cannot mix incompatible QML versions.");
527 bool fileImport =
false;
528 if (*(
type.uri) ==
'\0')
546 if (
type.structVersion > 1)
547 qFatal(
"qmlRegisterType(): Cannot mix incompatible QML versions.");
553 bool fileImport =
false;
554 if (*(
type.uri) ==
'\0')
577 data->setTypeRegistrationFailures(failures);
582 data->setTypeRegistrationFailures(
nullptr);
632 priv->version = version;
637 siinfo->typeName =
typeName.toUtf8();
638 priv->extraData.singletonTypeData->singletonInstanceInfo =
642 priv->extraData.compositeTypeData =
url;
655 error.setDescription(failures.join(u
'\n'));
656 errors->prepend(
error);
658 qWarning(
"%s", failures.join(u
'\n').toLatin1().constData());
664 const QUrl &
url,
const QQmlRefPointer<QV4::CompiledData::CompilationUnit> &compilationUnit,
670 bool urlExists =
true;
672 if (found ==
data->urlToType.cend()) {
674 if (found ==
data->urlToNonFileImportType.cend())
679 ? found.value()->typeId.iface()
681 if (compilationUnit.isNull())
684 const auto composite =
data->compositeTypes.constFind(iface);
685 if (composite ==
data->compositeTypes.constEnd() || composite.value() == compilationUnit)
692 if (!urlExists &&
type.isValid())
703 priv->extraData.inlineComponentTypeData =
url;
718 const QUrl &
url,
const QQmlRefPointer<QV4::CompiledData::CompilationUnit> &compilationUnit)
726 const auto jt =
data->compositeTypes.constFind(
it->typeId().iface());
727 if (jt ==
data->compositeTypes.constEnd() || *jt == compilationUnit)
738 if (
data.isValid()) {
746 data->compositeTypes.erase(
it);
758 if (hookRegistration.structVersion > 1)
759 qFatal(
"qmlRegisterType(): Cannot mix incompatible QML versions.");
770 qFatal(
"qmlRegisterSequenceContainer(): Cannot mix incompatible QML versions.");
800 bool weakProtectAllVersions)
805 if (!weakProtectAllVersions) {
806 module->setLockLevel(QQmlTypeModule::LockLevel::Strong);
814 const auto range = std::equal_range(
815 data->uriToModule.begin(),
data->uriToModule.end(), uri,
816 std::less<ModuleUri>());
843 QList<QQmlDirParser::Import>
result;
847 for (
auto it = unrevisioned.second;
it != unrevisioned.first;)
851 const auto revisioned =
data->moduleImports.equal_range(
853 for (
auto it = revisioned.second;
it != revisioned.first;)
859 const auto begin =
data->moduleImports.begin();
860 auto it = unrevisioned.first;
865 if (latestVersion.uri != uri)
870 }
while (
it !=
begin && (--
it).key() == latestVersion);
879 QQmlTypeModule *
module = getTypeModule(QString::fromUtf8(uri), version, data);
883 module->addMinorVersion(version.minorVersion());
890 QQmlTypeModule *
module = getTypeModule(QString::fromUtf8(uri), version, data);
894 QQmlType type =
module->type(QHashedStringRef(QString::fromUtf8(qmlName)), version);
924 if (!typeNamespace.
isEmpty() && typeNamespace != uri) {
929 error.setDescription(
930 QStringLiteral(
"Module namespace '%1' does not match import URI '%2'")
931 .
arg(typeNamespace, uri));
932 errors->prepend(
error);
941 if (!typeNamespace.
isEmpty()) {
948 "for type registration")
949 .
arg(typeNamespace));
950 errors->prepend(
error);
957 QStringLiteral(
"Module '%1' does not contain a module identifier directive - "
958 "it cannot be protected from external registrations.").
arg(uri));
961 if (instance && !qobject_cast<QQmlEngineExtensionInterface *>(instance)) {
968 "QQmlEngineExtensionInterface").
arg(typeNamespace));
969 errors->prepend(
error);
974#if QT_DEPRECATED_SINCE(6, 3)
975 if (
auto *plugin = qobject_cast<QQmlExtensionPlugin *>(instance)) {
977 QQmlExtensionPluginPrivate::get(plugin)->baseUrl
985 const char *moduleId = bytes.constData();
986 iface->registerTypes(moduleId);
989 if (failures.isEmpty() && !
data->registerModuleTypes(uri))
992 if (!failures.isEmpty()) {
994 for (
const QString &failure : std::as_const(failures)) {
996 error.setDescription(failure);
997 errors->prepend(
error);
1029 if (
ret.isValid() &&
ret.sourceUrl() ==
url)
1034 if (
ret.isValid() &&
ret.sourceUrl() ==
url)
1050 auto upper = std::upper_bound(
data->uriToModule.begin(),
data->uriToModule.end(), uri,
1051 std::less<ModuleUri>());
1052 if (upper ==
data->uriToModule.begin())
1055 const auto module = (--upper)->get();
1056 return (module->module() == uri)
1092 if (tm->minimumMinorVersion() <= version.
minorVersion()
1093 && tm->maximumMinorVersion() >= version.
minorVersion()) {
1108 auto range = std::equal_range(
data->uriToModule.begin(),
data->uriToModule.end(),
1109 uri, std::less<ModuleUri>());
1123 if (
ok) *
ok =
false;
1129 return *(
QObject *
const *)
v.constData();
1138 const auto iface = metaType.
iface();
1149 if (
type &&
type->listId == metaType)
1161 return type.attachedPropertiesFunction(
engine);
1166 int idx =
metaObject->indexOfClassInfo(
"DefaultProperty");
1192 int idx =
metaObject->indexOfClassInfo(
"DefaultMethod");
1229 return (
type.isInterface() &&
type.typeId() == metaType) ?
type.interfaceIId() :
nullptr;
1273 if (module.
isEmpty() ||
t.availableInVersion(module, version))
1304 if (module.
isEmpty() ||
t.availableInVersion(module, version))
1354 if (!
type.isValid() && includeNonFileImports)
1408 if (
auto composite =
data->findPropertyCacheInCompositeTypes(metaType))
1423 if (
auto composite =
data->findPropertyCacheInCompositeTypes(metaType))
1427 return (
type &&
type->typeId == metaType)
1440 if (
auto composite =
data->findPropertyCacheInCompositeTypes(metaType))
1444 if (
type &&
type->typeId == metaType) {
1446 return data->propertyCache(
mo,
type->version);
1466 if (!
type ||
type->typeId != metaType)
1470 ?
type->metaObjectForValueType()
1471 :
type->baseMetaObject;
1488 if (
auto composite =
data->findPropertyCacheInCompositeTypes(metaType))
1492 if (!typePriv || typePriv->typeId != metaType)
1496 if (
type.containsRevisionedAttributes()) {
1499 return data->propertyCache(
type, version);
1520 for (
auto & module :
data->uriToModule)
1522 data->clearPropertyCachesForVersion(typeIndex);
1524 data->undeletableTypes.remove(
type);
1538 for (
auto it =
data->inlineComponentTypes.
begin(),
end =
data->inlineComponentTypes.end();
1544 if (icPriv && icPriv->count() > 1)
1552 const QQmlRefPointer<QV4::CompiledData::CompilationUnit> &compilationUnit)
1564 doCheck(compilationUnit->metaType().iface());
1565 for (
auto &&inlineData: compilationUnit->inlineComponentData)
1566 doCheck(inlineData.qmlType.typeId().iface());
1576 if (!
data.isValid())
1579 bool droppedAtLeastOneComposite;
1581 droppedAtLeastOneComposite =
false;
1583 while (
it !=
data->compositeTypes.
end()) {
1586 droppedAtLeastOneComposite =
true;
1591 }
while (droppedAtLeastOneComposite);
1593 bool deletedAtLeastOneType;
1595 deletedAtLeastOneType =
false;
1600 deletedAtLeastOneType =
true;
1612 for (
auto &module :
data->uriToModule)
1615 data->clearPropertyCachesForVersion(
d->index);
1621 }
while (deletedAtLeastOneType);
1623 bool deletedAtLeastOneCache;
1625 deletedAtLeastOneCache =
false;
1627 while (
it !=
data->propertyCaches.
end()) {
1628 if ((*it)->count() == 1) {
1630 deletedAtLeastOneCache =
true;
1635 }
while (deletedAtLeastOneCache);
1645 QList<QString>
names;
1650 names +=
t.qmlTypeName();
1664 QList<QQmlType>
types;
1687 QList<QQmlType> retn;
1688 for (
const auto t : std::as_const(
data->nameToType)) {
1690 if (
type.isSingleton())
1698 quint32 numTypedFunctions = 0;
1701 if (function->functionPtr)
1702 ++numTypedFunctions;
1715 for (
const auto lookup : std::as_const(
data->lookupCachedQmlUnit)) {
1719 qCDebug(DBG_DISK_CACHE) <<
"Error loading pre-compiled file " << uri <<
":" <<
error;
1727 <<
"Error loading pre-compiled file " << uri
1728 <<
": compilation unit contains functions not compiled to native code.";
1769 if (
type.isValid()) {
1772 if (lastSlash != -1)
1786 if (
type.isValid()) {
1789 if (lastSlash != -1)
1804 QList<QQmlProxyMetaObject::ProxyData> metaObjects;
1805 mo =
mo->d.superdata;
1818 clone(builder, extMetaObject, superdataBaseMetaObject, baseMetaObject,
1821 mmo->
d.superdata = baseMetaObject;
1822 if (!metaObjects.isEmpty())
1823 metaObjects.constLast().metaObject->d.superdata = mmo;
1824 else if (lastMetaObject)
1825 lastMetaObject->d.superdata = mmo;
1827 metaObjects <<
data;
1840 createProxyMetaObject(
1841 t,
t->baseMetaObject,
t->extraData.cppTypeData->extMetaObject,
1842 t->extraData.cppTypeData->extFunc);
1844 createProxyMetaObject(
1845 t,
t->baseMetaObject,
t->extraData.singletonTypeData->extMetaObject,
1846 t->extraData.singletonTypeData->extFunc);
1859 case QMetaType::QStringList:
1860 case QMetaType::QObjectStar:
1861 case QMetaType::VoidStar:
1862 case QMetaType::Nullptr:
1864 case QMetaType::QLocale:
1865 case QMetaType::QImage:
1866 case QMetaType::QPixmap:
1883 switch (metaType.
id()) {
1884 case QMetaType::QPoint:
1885 return &QQmlPointValueType::staticMetaObject;
1886 case QMetaType::QPointF:
1887 return &QQmlPointFValueType::staticMetaObject;
1888 case QMetaType::QSize:
1889 return &QQmlSizeValueType::staticMetaObject;
1890 case QMetaType::QSizeF:
1891 return &QQmlSizeFValueType::staticMetaObject;
1892 case QMetaType::QRect:
1893 return &QQmlRectValueType::staticMetaObject;
1894 case QMetaType::QRectF:
1895 return &QQmlRectFValueType::staticMetaObject;
1896#if QT_CONFIG(easingcurve)
1897 case QMetaType::QEasingCurve:
1898 return &QQmlEasingValueType::staticMetaObject;
1933 return *
data->metaTypeToValueType.insert(
type.id(),
nullptr);
1943 const QQmlRefPointer<QV4::CompiledData::CompilationUnit> &compilationUnit)
1954 data->compositeTypes.insert(iface, compilationUnit);
1957 doInsert(compilationUnit->metaType().iface());
1958 for (
auto &&inlineData: compilationUnit->inlineComponentData)
1959 doInsert(inlineData.qmlType.typeId().iface());
1963 const QQmlRefPointer<QV4::CompiledData::CompilationUnit> &compilationUnit)
1973 data->compositeTypes.erase(
it);
1976 doRemove(compilationUnit->metaType().iface());
1977 for (
auto &&inlineData: compilationUnit->inlineComponentData)
1978 doRemove(inlineData.qmlType.typeId().iface());
1982 const QQmlRefPointer<QV4::CompiledData::CompilationUnit> &compilationUnit)
2002 if (found ==
data->urlToType.constEnd()) {
2004 if (found ==
data->urlToNonFileImportType.constEnd())
2005 return QQmlRefPointer<QV4::CompiledData::CompilationUnit>();
2008 const auto composite =
data->compositeTypes.constFind(found.value()->typeId.iface());
2009 return composite ==
data->compositeTypes.constEnd()
2010 ? QQmlRefPointer<QV4::CompiledData::CompilationUnit>()
2011 : composite.value();
static QString translate(const char *context, const char *key, const char *disambiguation=nullptr, int n=-1)
\threadsafe
\inmodule QtCore\reentrant
const_iterator constFind(const Key &key) const noexcept
T value(const Key &key) const noexcept
void swap(QHash &other) noexcept
int indexOf(const QChar &, int from=0) const
const QChar * constData() const
bool removeOne(const AT &t)
void append(parameter_type t)
std::pair< iterator, iterator > equal_range(const Key &key)
const_iterator ConstIterator
iterator insert(const Key &key, const T &value)
Inserts a new item with the key and a value of value.
iterator insert(const Key &key, const T &value)
size_type remove(const Key &key)
std::pair< iterator, iterator > equal_range(const Key &akey)
static QObjectPrivate * get(QObject *o)
The QQmlCustomParser class allows you to add new arbitrary types to QML.
The QQmlError class encapsulates a QML error.
static QUrl urlFromLocalFileOrQrcOrUrl(const QString &)
static QUrl normalize(const QUrl &unNormalizedUrl)
const QMetaObject * baseMetaObject
@ SequentialContainerType
const QMetaObject * metaObject() const
const_iterator cend() const noexcept
const_iterator constEnd() const noexcept
iterator erase(const_iterator i)
const_iterator constFind(const T &value) const
bool contains(const T &value) const
const_iterator cbegin() const noexcept
iterator insert(const T &value)
\macro QT_RESTRICTED_CAST_FROM_ASCII
qsizetype indexOf(QLatin1StringView s, qsizetype from=0, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
bool isEmpty() const noexcept
Returns true if the string has no characters; otherwise returns false.
const QChar * constData() const
Returns a pointer to the data stored in the QString.
qsizetype size() const noexcept
Returns the number of characters in this string.
static QString fromUtf8(QByteArrayView utf8)
This is an overloaded member function, provided for convenience. It differs from the above function o...
QString arg(qlonglong a, int fieldwidth=0, int base=10, QChar fillChar=u' ') const
static QString fromRawData(const QChar *, qsizetype size)
Constructs a QString that uses the first size Unicode characters in the array unicode.
QByteArray toUtf8() const &
static constexpr QTypeRevision fromVersion(Major majorVersion, Minor minorVersion)
Produces a QTypeRevision from the given majorVersion and minorVersion, both of which need to be a val...
constexpr bool hasMinorVersion() const
Returns true if the minor version is known, otherwise false.
constexpr bool hasMajorVersion() const
Returns true if the major version is known, otherwise false.
constexpr quint8 minorVersion() const
Returns the minor version encoded in the revision.
constexpr quint8 majorVersion() const
Returns the major version encoded in the revision.
QString fragment(ComponentFormattingOptions options=PrettyDecoded) const
Returns the fragment of the URL.
QSet< QString >::iterator it
const CachedQmlUnit *(* QmlUnitCacheLookupFunction)(const QUrl &url)
AutoParentResult(* AutoParentFunction)(QObject *object, QObject *parent)
Combined button and popup list for selecting options.
Q_CORE_EXPORT int qstrcmp(const char *str1, const char *str2)
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction function
DBusConnection const char DBusError * error
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
static QDBusError::ErrorType get(const char *name)
typedef QByteArray(EGLAPIENTRYP PFNQGSGETDISPLAYSPROC)()
#define Q_GLOBAL_STATIC(TYPE, NAME,...)
#define Q_LOGGING_CATEGORY(name,...)
#define qCWarning(category,...)
#define qCDebug(category,...)
#define Q_DECLARE_LOGGING_CATEGORY(name)
static ControlElement< T > * ptr(QWidget *widget)
GLsizei const GLfloat * v
[13]
GLsizei GLenum GLenum * types
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLint GLenum GLboolean normalized
GLsizei const GLchar *const * string
[0]
static qreal dot(const QPointF &a, const QPointF &b)
int qmlTypeId(const char *uri, int versionMajor, int versionMinor, const char *qmlName)
QQmlPrivate::QQmlAttachedPropertiesFunc< QObject > QQmlAttachedPropertiesFunc
QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator begin(const QRegularExpressionMatchIterator &iterator)
static QLatin1StringView typeStr(QShaderDescription::VariableType t)
#define qPrintable(string)
QLatin1StringView QLatin1String
#define QStringLiteral(str)
const char className[16]
[1]
QUrl url("example.com")
[constructor-url-reference]
obj metaObject() -> className()
ModuleUri(const std::unique_ptr< QQmlTypeModule > &module)
ModuleUri(const QString &string)
\inmodule QtCore \reentrant
const AOTCompiledFunction * aotCompiledFunctions
const QV4::CompiledData::Unit * qmlData
QMetaSequence metaSequence
static QByteArray createClassNameTypeByUrl(const QUrl &url)
static QByteArray createClassNameForInlineComponent(const QUrl &baseUrl, const QString &name)
QQmlRefPointer< const SingletonInstanceInfo > ConstPtr
QQmlRefPointer< SingletonInstanceInfo > Ptr
quint32_le functionTableSize