6#include <QtQml/qjsvalue.h>
7#include <QtQml/qqmlengine.h>
8#include <QtQml/qqmlcontext.h>
9#include <QtQml/qqmlcomponent.h>
11#include <private/qqmlcustomparser_p.h>
12#include <private/qqmldata_p.h>
13#include <private/qqmlmetatypedata_p.h>
14#include <private/qqmlpropertycache_p.h>
15#include <private/qqmltypedata_p.h>
19QQmlTypePrivate::QQmlTypePrivate(QQmlType::RegistrationType type)
23 case QQmlType::CppType:
24 extraData.cppTypeData =
new QQmlCppTypeData;
25 extraData.cppTypeData->allocationSize = 0;
26 extraData.cppTypeData->newFunc =
nullptr;
27 extraData.cppTypeData->createValueTypeFunc =
nullptr;
28 extraData.cppTypeData->parserStatusCast = -1;
29 extraData.cppTypeData->extFunc =
nullptr;
30 extraData.cppTypeData->extMetaObject =
nullptr;
31 extraData.cppTypeData->customParser =
nullptr;
32 extraData.cppTypeData->attachedPropertiesFunc =
nullptr;
33 extraData.cppTypeData->attachedPropertiesType =
nullptr;
34 extraData.cppTypeData->propertyValueSourceCast = -1;
35 extraData.cppTypeData->propertyValueInterceptorCast = -1;
36 extraData.cppTypeData->finalizerCast = -1;
37 extraData.cppTypeData->registerEnumClassesUnscoped =
true;
38 extraData.cppTypeData->registerEnumsFromRelatedTypes =
true;
40 case QQmlType::SingletonType:
41 case QQmlType::CompositeSingletonType:
42 extraData.singletonTypeData =
new QQmlSingletonTypeData;
43 extraData.singletonTypeData->singletonInstanceInfo =
nullptr;
44 extraData.singletonTypeData->extFunc =
nullptr;
45 extraData.singletonTypeData->extMetaObject =
nullptr;
47 case QQmlType::InterfaceType:
48 extraData.interfaceTypeData =
nullptr;
50 case QQmlType::CompositeType:
51 new (&extraData.compositeTypeData) QUrl();
53 case QQmlType::InlineComponentType:
54 new (&extraData.inlineComponentTypeData) QUrl();
56 case QQmlType::SequentialContainerType:
57 new (&extraData.sequentialContainerTypeData) QMetaSequence();
59 case QQmlType::JavaScriptType:
60 new (&extraData.javaScriptTypeData) QUrl();
62 default: qFatal(
"QQmlTypePrivate Internal Error.");
66QQmlTypePrivate::~QQmlTypePrivate()
68 delete enums.fetchAndStoreAcquire(
nullptr);
69 delete proxyMetaObjects.fetchAndStoreAcquire(
nullptr);
72 case QQmlType::CppType:
73 delete extraData.cppTypeData->customParser;
74 delete extraData.cppTypeData;
76 case QQmlType::SingletonType:
77 case QQmlType::CompositeSingletonType:
78 extraData.singletonTypeData->singletonInstanceInfo.reset();
79 delete extraData.singletonTypeData;
81 case QQmlType::CompositeType:
82 extraData.compositeTypeData.~QUrl();
84 case QQmlType::InlineComponentType:
85 extraData.inlineComponentTypeData.~QUrl();
87 case QQmlType::SequentialContainerType:
88 extraData.sequentialContainerTypeData.~QMetaSequence();
90 case QQmlType::JavaScriptType:
91 extraData.javaScriptTypeData.~QUrl();
98QQmlType::QQmlType() =
default;
99QQmlType::QQmlType(
const QQmlType &) =
default;
100QQmlType::QQmlType(QQmlType &&) =
default;
101QQmlType &QQmlType::operator =(
const QQmlType &other) =
default;
102QQmlType &QQmlType::operator =(QQmlType &&other) =
default;
103QQmlType::QQmlType(
const QQmlTypePrivate *priv) : d(priv) {}
104QQmlType::~QQmlType() =
default;
106QHashedString QQmlType::module()
const
109 return QHashedString();
113QTypeRevision QQmlType::version()
const
116 return QTypeRevision();
120bool QQmlType::availableInVersion(QTypeRevision version)
const
125 if (!version.hasMajorVersion())
128 if (version.majorVersion() != d->version.majorVersion())
131 return !version.hasMinorVersion() || version.minorVersion() >= d->version.minorVersion();
134bool QQmlType::availableInVersion(
const QHashedStringRef &module, QTypeRevision version)
const
136 if (!d || module != d->module)
139 return availableInVersion(version);
142QQmlType QQmlTypePrivate::resolveCompositeBaseType(QQmlTypeLoader *typeLoader)
const
144 Q_ASSERT(isComposite());
147 QQmlRefPointer<QQmlTypeData> td(typeLoader->getType(sourceUrl()));
148 if (td.isNull() || !td->isComplete())
150 QV4::CompiledData::CompilationUnit *compilationUnit = td->compilationUnit();
151 if (
const auto cache = compilationUnit->rootPropertyCache())
152 return QQmlMetaType::qmlType(cache->firstCppMetaObject());
156QQmlPropertyCache::ConstPtr QQmlTypePrivate::compositePropertyCache(
157 QQmlTypeLoader *typeLoader)
const
160 Q_ASSERT(isComposite());
163 QQmlRefPointer<QQmlTypeData> td(typeLoader->getType(sourceUrl()));
164 if (td.isNull() || !td->isComplete())
166 QV4::CompiledData::CompilationUnit *compilationUnit = td->compilationUnit();
167 return compilationUnit->rootPropertyCache();
172 return mo->property(index).revision();
175const QQmlTypePrivate::ProxyMetaObjects *QQmlTypePrivate::init()
const
177 if (
const ProxyMetaObjects *result = proxyMetaObjects.loadRelaxed())
180 ProxyMetaObjects *proxies =
new ProxyMetaObjects;
181 auto finalize = [
this, proxies]() ->
const ProxyMetaObjects *{
182 const ProxyMetaObjects *concurrentModification;
183 if (proxyMetaObjects.testAndSetOrdered(
nullptr, proxies, concurrentModification))
187 return concurrentModification;
190 const QMetaObject *mo = baseMetaObject;
196 QList<QQmlProxyMetaObject::ProxyData> metaObjects;
198 auto setupExtendedMetaObject = [&](
const QMetaObject *extMetaObject,
199 QObject *(*extFunc)(QObject *)) {
204 QMetaObjectBuilder builder;
205 QQmlMetaType::clone(builder, extMetaObject, extMetaObject, extMetaObject,
206 extFunc ? QQmlMetaType::CloneAll : QQmlMetaType::CloneEnumsOnly);
207 QMetaObject *mmo = builder.toMetaObject();
208 mmo->d.superdata = mo;
209 QQmlProxyMetaObject::ProxyData data = { mmo, extFunc, 0, 0 };
211 QQmlMetaType::registerMetaObjectForType(mmo,
const_cast<QQmlTypePrivate *>(
this));
214 if (regType == QQmlType::SingletonType)
215 setupExtendedMetaObject(extraData.singletonTypeData->extMetaObject, extraData.singletonTypeData->extFunc);
216 else if (regType == QQmlType::CppType)
217 setupExtendedMetaObject(extraData.cppTypeData->extMetaObject, extraData.cppTypeData->extFunc);
219 metaObjects.append(QQmlMetaType::proxyData(
220 mo, baseMetaObject, metaObjects.isEmpty() ?
nullptr
221 : metaObjects.constLast().metaObject));
223 for (
int ii = 0; ii < metaObjects.size(); ++ii) {
224 metaObjects[ii].propertyOffset =
225 metaObjects.at(ii).metaObject->propertyOffset();
226 metaObjects[ii].methodOffset =
227 metaObjects.at(ii).metaObject->methodOffset();
230 bool containsRevisionedAttributes =
false;
234 const QMetaObject *mo =
nullptr;
235 if (metaObjects.isEmpty())
238 mo = metaObjects.constFirst().metaObject;
240 for (
int ii = 0; !containsRevisionedAttributes && ii < mo->propertyCount(); ++ii) {
241 if (isPropertyRevisioned(mo, ii))
242 containsRevisionedAttributes =
true;
245 for (
int ii = 0; !containsRevisionedAttributes && ii < mo->methodCount(); ++ii) {
246 if (mo->method(ii).revision() != 0)
247 containsRevisionedAttributes =
true;
251 proxies->data = std::move(metaObjects);
252 proxies->containsRevisionedAttributes = containsRevisionedAttributes;
257const QQmlTypePrivate::Enums *QQmlTypePrivate::initEnums(QQmlTypeLoader *typeLoader)
const
259 if (
const Enums *result = enums.loadRelaxed())
262 QQmlPropertyCache::ConstPtr cache;
264 cache = compositePropertyCache(typeLoader);
269 Enums *newEnums =
new Enums;
274 insertEnumsFromPropertyCache(newEnums, cache);
276 if (baseMetaObject) {
278 const ProxyMetaObjects *proxies = init();
281 proxies->data.isEmpty() ? baseMetaObject : proxies->data.constFirst().metaObject);
284 const Enums *concurrentModification;
285 if (enums.testAndSetOrdered(
nullptr, newEnums, concurrentModification))
289 return concurrentModification;
292void QQmlTypePrivate::insertEnums(Enums *enums,
const QMetaObject *metaObject)
const
295 if (regType != QQmlType::CppType || extraData.cppTypeData->registerEnumsFromRelatedTypes) {
296 if (
const auto *related = metaObject->d.relatedMetaObjects) {
297 while (
const QMetaObject *relatedMetaObject = *related) {
298 insertEnums(enums, relatedMetaObject);
304 QSet<QString> localEnums;
305 const QMetaObject *localMetaObject =
nullptr;
308 auto shouldSingletonAlsoRegisterUnscoped = [&](){
309 Q_ASSERT(regType == QQmlType::SingletonType);
312 int idx = baseMetaObject->indexOfClassInfo(
"RegisterEnumClassesUnscoped");
315 if (qstrcmp(baseMetaObject->classInfo(idx).value(),
"false") == 0)
321 for (
int ii = 0; ii < metaObject->enumeratorCount(); ++ii) {
322 QMetaEnum me = metaObject->enumerator(ii);
323 const bool isScoped = me.isScoped();
324 QStringHash<
int> *e =
new QStringHash<
int>();
332 if (me.enclosingMetaObject() != localMetaObject) {
334 localMetaObject = me.enclosingMetaObject();
336 const bool shouldRegisterUnscoped = !isScoped
337 || (regType == QQmlType::CppType && extraData.cppTypeData->registerEnumClassesUnscoped)
338 || (regType == QQmlType::SingletonType && shouldSingletonAlsoRegisterUnscoped())
341 for (
int jj = 0; jj < me.keyCount(); ++jj) {
342 const QString key = QString::fromUtf8(me.key(jj));
343 const int value = me.value(jj);
344 if (shouldRegisterUnscoped) {
345 if (localEnums.contains(key)) {
346 auto existingEntry = enums->enums.find(key);
347 if (existingEntry != enums->enums.end() && existingEntry.value() != value) {
348 qWarning(
"Previously registered enum will be overwritten due to name clash: %s.%s", metaObject->className(), key.toUtf8().constData());
349 createEnumConflictReport(metaObject, key);
352 localEnums.insert(key);
354 enums->enums.insert(key, value);
356 e->insert(key, value);
360 enums->scopedEnumIndex.insert(QString::fromUtf8(me.name()), enums->scopedEnums.size());
361 enums->scopedEnums << e;
363 enums->unscopedEnumIndex.insert(QString::fromUtf8(me.name()), enums->unscopedEnums.size());
364 enums->unscopedEnums << e;
369void QQmlTypePrivate::createListOfPossibleConflictingItems(
const QMetaObject *metaObject, QList<EnumInfo> &enumInfoList, QStringList path)
const
371 path.append(QString::fromUtf8(metaObject->className()));
373 if (metaObject->d.relatedMetaObjects) {
374 const auto *related = metaObject->d.relatedMetaObjects;
377 createListOfPossibleConflictingItems(*related++, enumInfoList, path);
381 for (
int ii = 0; ii < metaObject->enumeratorCount(); ++ii) {
382 const auto e = metaObject->enumerator(ii);
384 for (
int jj = 0; jj < e.keyCount(); ++jj) {
385 const QString key = QString::fromUtf8(e.key(jj));
388 enumInfo.metaObjectName = QString::fromUtf8(metaObject->className());
389 enumInfo.enumName = QString::fromUtf8(e.name());
390 enumInfo.enumKey = key;
391 enumInfo.scoped = e.isScoped();
392 enumInfo.path = path;
393 enumInfo.metaEnumScope = QString::fromUtf8(e.scope());
394 enumInfoList.append(enumInfo);
399void QQmlTypePrivate::createEnumConflictReport(
const QMetaObject *metaObject,
const QString &conflictingKey)
const
401 QList<EnumInfo> enumInfoList;
404 metaObject = baseMetaObject;
407 qWarning() <<
"No meta object information available. Skipping conflict analysis.";
411 createListOfPossibleConflictingItems(metaObject, enumInfoList, QStringList());
413 qWarning().noquote() << QLatin1String(
"Possible conflicting items:");
415 for (
const auto &i : std::as_const(enumInfoList)) {
416 if (i.enumKey == conflictingKey)
417 qWarning().noquote().nospace() <<
" " << i.metaObjectName <<
"." << i.enumName <<
"." << i.enumKey <<
" from scope "
418 << i.metaEnumScope <<
" injected by " << i.path.join(QLatin1String(
"->"));
422void QQmlTypePrivate::insertEnumsFromPropertyCache(
423 Enums *enums,
const QQmlPropertyCache::ConstPtr &cache)
const
425 const QMetaObject *cppMetaObject = cache->firstCppMetaObject();
427 for (
const QQmlPropertyCache *currentCache = cache.data();
428 currentCache && currentCache->metaObject() != cppMetaObject;
429 currentCache = currentCache->parent().data()) {
431 int count = currentCache->qmlEnumCount();
432 for (
int ii = 0; ii < count; ++ii) {
433 QStringHash<
int> *scoped =
new QStringHash<
int>();
434 QQmlEnumData *enumData = currentCache->qmlEnum(ii);
436 for (
int jj = 0; jj < enumData->values.size(); ++jj) {
437 const QQmlEnumValue &value = enumData->values.at(jj);
438 enums->enums.insert(value.namedValue, value.value);
439 scoped->insert(value.namedValue, value.value);
441 enums->scopedEnums << scoped;
442 enums->scopedEnumIndex.insert(enumData->name, enums->scopedEnums.size()-1);
445 insertEnums(enums, cppMetaObject);
448void QQmlTypePrivate::setName(
const QString &uri,
const QString &element)
451 elementName = element;
452 name = uri.isEmpty() ? element : (uri + QLatin1Char(
'/') + element);
455QByteArray QQmlType::typeName()
const
458 if (d->regType == SingletonType || d->regType == CompositeSingletonType)
459 return d->extraData.singletonTypeData->singletonInstanceInfo->typeName;
460 else if (d->baseMetaObject)
461 return d->baseMetaObject->className();
466QString QQmlType::elementName()
const
470 return d->elementName;
473QString QQmlType::qmlTypeName()
const
481
482
483
484
485
486QObject *QQmlType::create()
const
489 return create(&unused, 0);
493
494
495
496
497
498
499
500
501
502
503
504QObject *QQmlType::create(
void **memory, size_t additionalMemory)
const
506 if (!d || !isCreatable())
509 QObject *rv = (QObject *)operator
new(d->extraData.cppTypeData->allocationSize + additionalMemory);
510 d->extraData.cppTypeData->newFunc(rv, d->extraData.cppTypeData->userdata);
513 *memory = ((
char *)rv) + d->extraData.cppTypeData->allocationSize;
518
519
520
521
522QObject *QQmlType::createWithQQmlData()
const
524 void *ddataMemory =
nullptr;
525 auto instance = create(&ddataMemory,
sizeof(QQmlData));
528 QObjectPrivate* p = QObjectPrivate::get(instance);
529 Q_ASSERT(!p->isDeletingChildren);
530 if (!p->declarativeData)
531 p->declarativeData =
new (ddataMemory) QQmlData(QQmlData::DoesNotOwnMemory);
535QQmlType::SingletonInstanceInfo::ConstPtr QQmlType::singletonInstanceInfo()
const
539 if (d->regType != SingletonType && d->regType != CompositeSingletonType)
541 return d->extraData.singletonTypeData->singletonInstanceInfo;
544QQmlCustomParser *QQmlType::customParser()
const
548 if (d->regType != CppType)
550 return d->extraData.cppTypeData->customParser;
553QQmlType::CreateValueTypeFunc QQmlType::createValueTypeFunction()
const
555 if (!d || d->regType != CppType)
557 return d->extraData.cppTypeData->createValueTypeFunc;
560bool QQmlType::canConstructValueType()
const
562 if (!d || d->regType != CppType)
564 return d->extraData.cppTypeData->constructValueType;
567bool QQmlType::canPopulateValueType()
const
569 if (!d || d->regType != CppType)
571 return d->extraData.cppTypeData->populateValueType;
574QQmlType::CreateFunc QQmlType::createFunction()
const
576 if (!d || d->regType != CppType)
578 return d->extraData.cppTypeData->newFunc;
581QString QQmlType::noCreationReason()
const
583 if (!d || d->regType != CppType)
585 return d->extraData.cppTypeData->noCreationReason;
588bool QQmlType::isCreatable()
const
590 return d && d->regType == CppType && d->extraData.cppTypeData->newFunc;
593QQmlType::ExtensionFunc QQmlType::extensionFunction()
const
598 switch (d->regType) {
600 return d->extraData.cppTypeData->extFunc;
602 return d->extraData.singletonTypeData->extFunc;
608const QMetaObject *QQmlType::extensionMetaObject()
const
613 switch (d->regType) {
615 return d->extraData.cppTypeData->extMetaObject;
617 return d->extraData.singletonTypeData->extMetaObject;
623bool QQmlType::isExtendedType()
const
625 return d && !d->init()->data.isEmpty();
628bool QQmlType::isSingleton()
const
630 return d && (d->regType == SingletonType || d->regType == CompositeSingletonType);
633bool QQmlType::isInterface()
const
635 return d && d->regType == InterfaceType;
638bool QQmlType::isComposite()
const
640 return d && d->isComposite();
643bool QQmlType::isCompositeSingleton()
const
649 return d && d->regType == CompositeSingletonType && !isInlineComponentType();
652bool QQmlType::isQObjectSingleton()
const
654 return d && d->regType == SingletonType && d->extraData.singletonTypeData->singletonInstanceInfo->qobjectCallback;
657bool QQmlType::isQJSValueSingleton()
const
659 return d && d->regType == SingletonType && d->extraData.singletonTypeData->singletonInstanceInfo->scriptCallback;
662bool QQmlType::isSequentialContainer()
const
664 return d && d->regType == SequentialContainerType;
667bool QQmlType::isValueType()
const
669 return d && d->isValueType();
672QMetaType QQmlType::typeId()
const
674 return d ? d->typeId : QMetaType{};
677QMetaType QQmlType::qListTypeId()
const
679 return d ? d->listId : QMetaType{};
682QMetaSequence QQmlType::listMetaSequence()
const
684 return isSequentialContainer() ? d->extraData.sequentialContainerTypeData : QMetaSequence();
687const QMetaObject *QQmlType::metaObject()
const
689 return d ? d->metaObject() :
nullptr;
692const QMetaObject *QQmlType::metaObjectForValueType()
const
695 return d->metaObjectForValueType();
698const QMetaObject *QQmlType::baseMetaObject()
const
700 return d ? d->baseMetaObject :
nullptr;
703bool QQmlType::containsRevisionedAttributes()
const
705 return d && d->init()->containsRevisionedAttributes;
708QTypeRevision QQmlType::metaObjectRevision()
const
710 return d ? d->revision : QTypeRevision();
713QQmlAttachedPropertiesFunc QQmlType::attachedPropertiesFunction(QQmlTypeLoader *typeLoader)
const
715 if (
const QQmlTypePrivate *base = d ? d->attachedPropertiesBase(typeLoader) :
nullptr)
716 return base->extraData.cppTypeData->attachedPropertiesFunc;
720const QMetaObject *QQmlType::attachedPropertiesType(QQmlTypeLoader *typeLoader)
const
722 if (
const QQmlTypePrivate *base = d ? d->attachedPropertiesBase(typeLoader) :
nullptr)
723 return base->extraData.cppTypeData->attachedPropertiesType;
727int QQmlType::parserStatusCast()
const
729 if (!d || d->regType != CppType)
731 return d->extraData.cppTypeData->parserStatusCast;
734int QQmlType::propertyValueSourceCast()
const
736 if (!d || d->regType != CppType)
738 return d->extraData.cppTypeData->propertyValueSourceCast;
741int QQmlType::propertyValueInterceptorCast()
const
743 if (!d || d->regType != CppType)
745 return d->extraData.cppTypeData->propertyValueInterceptorCast;
748int QQmlType::finalizerCast()
const
750 if (!d || d->regType != CppType)
752 return d->extraData.cppTypeData->finalizerCast;
755const char *QQmlType::interfaceIId()
const
757 if (!d || d->regType != InterfaceType)
759 return d->extraData.interfaceTypeData;
762int QQmlType::index()
const
764 return d ? d->index : -1;
767bool QQmlType::isInlineComponentType()
const {
768 return d ? d->regType == QQmlType::InlineComponentType :
false;
771QUrl QQmlType::sourceUrl()
const
773 return d ? d->sourceUrl() : QUrl();
776int QQmlType::enumValue(QQmlTypeLoader *typeLoader,
const QHashedStringRef &name,
bool *ok)
const
778 return QQmlTypePrivate::enumValue(d, typeLoader, name, ok);
781int QQmlType::enumValue(QQmlTypeLoader *typeLoader,
const QHashedCStringRef &name,
bool *ok)
const
783 return QQmlTypePrivate::enumValue(d, typeLoader, name, ok);
786int QQmlType::enumValue(QQmlTypeLoader *typeLoader,
const QV4::String *name,
bool *ok)
const
788 return QQmlTypePrivate::enumValue(d, typeLoader, name, ok);
791int QQmlType::scopedEnumIndex(QQmlTypeLoader *typeLoader,
const QV4::String *name,
bool *ok)
const
793 return QQmlTypePrivate::enumIndex<QQmlTypePrivate::Enums::Scoped>(
794 d, typeLoader, name, ok);
797int QQmlType::scopedEnumIndex(QQmlTypeLoader *typeLoader,
const QString &name,
bool *ok)
const
799 return QQmlTypePrivate::enumIndex<QQmlTypePrivate::Enums::Scoped>(
800 d, typeLoader, name, ok);
803int QQmlType::unscopedEnumIndex(QQmlTypeLoader *typeLoader,
const QV4::String *name,
bool *ok)
const
805 return QQmlTypePrivate::enumIndex<QQmlTypePrivate::Enums::Unscoped>(
806 d, typeLoader, name, ok);
809int QQmlType::unscopedEnumIndex(QQmlTypeLoader *typeLoader,
const QString &name,
bool *ok)
const
811 return QQmlTypePrivate::enumIndex<QQmlTypePrivate::Enums::Unscoped>(
812 d, typeLoader, name, ok);
815int QQmlType::scopedEnumValue(QQmlTypeLoader *typeLoader,
int index,
const QV4::String *name,
bool *ok)
const
817 return QQmlTypePrivate::enumValue<QQmlTypePrivate::Enums::Scoped>(
818 d, typeLoader, index, name, ok);
821int QQmlType::scopedEnumValue(QQmlTypeLoader *typeLoader,
int index,
const QString &name,
bool *ok)
const
823 return QQmlTypePrivate::enumValue<QQmlTypePrivate::Enums::Scoped>(
824 d, typeLoader, index, name, ok);
827int QQmlType::scopedEnumValue(QQmlTypeLoader *typeLoader,
const QHashedStringRef &scopedEnumName,
const QHashedStringRef &name,
bool *ok)
const
829 return QQmlTypePrivate::enumValue<QQmlTypePrivate::Enums::Scoped>(
830 d, typeLoader, scopedEnumName, name, ok);
833int QQmlType::unscopedEnumValue(QQmlTypeLoader *typeLoader,
int index,
const QV4::String *name,
bool *ok)
const
835 return QQmlTypePrivate::enumValue<QQmlTypePrivate::Enums::Unscoped>(
836 d, typeLoader, index, name, ok);
839int QQmlType::unscopedEnumValue(QQmlTypeLoader *typeLoader,
int index,
const QString &name,
bool *ok)
const
841 return QQmlTypePrivate::enumValue<QQmlTypePrivate::Enums::Unscoped>(
842 d, typeLoader, index, name, ok);
845int QQmlType::unscopedEnumValue(QQmlTypeLoader *typeLoader,
const QHashedStringRef &scopedEnumName,
const QHashedStringRef &name,
bool *ok)
const
847 return QQmlTypePrivate::enumValue<QQmlTypePrivate::Enums::Unscoped>(
848 d, typeLoader, scopedEnumName, name, ok);
851QString QQmlType::scopedEnumKey(QQmlTypeLoader *typeLoader,
int index,
int value,
bool *ok)
const
853 return QQmlTypePrivate::enumKey<QQmlTypePrivate::Enums::Scoped>(
854 d, typeLoader, index, value, ok);
857QStringList QQmlType::scopedEnumKeys(QQmlTypeLoader *typeLoader,
int index,
int value,
bool *ok)
const
859 return QQmlTypePrivate::enumKeys<QQmlTypePrivate::Enums::Scoped>(
860 d, typeLoader, index, value, ok);
863QString QQmlType::unscopedEnumKey(QQmlTypeLoader *typeLoader,
int index,
int value,
bool *ok)
const
865 return QQmlTypePrivate::enumKey<QQmlTypePrivate::Enums::Unscoped>(
866 d, typeLoader, index, value, ok);
869QStringList QQmlType::unscopedEnumKeys(QQmlTypeLoader *typeLoader,
int index,
int value,
872 return QQmlTypePrivate::enumKeys<QQmlTypePrivate::Enums::Unscoped>(
873 d, typeLoader, index, value, ok);
877void QQmlType::refHandle(
const QQmlTypePrivate *priv)
883void QQmlType::derefHandle(
const QQmlTypePrivate *priv)
889int QQmlType::refCount(
const QQmlTypePrivate *priv)
892 return priv->count();
896void QQmlType::createProxy(QObject *instance)
const
898 const QQmlTypePrivate::ProxyMetaObjects *proxies = d->init();
899 if (!proxies->data.isEmpty())
900 (
void)
new QQmlProxyMetaObject(instance, &proxies->data);
static bool isPropertyRevisioned(const QMetaObject *mo, int index)