diff options
author | Fabian Kosmale <fabian.kosmale@qt.io> | 2020-11-18 16:35:20 +0100 |
---|---|---|
committer | Fabian Kosmale <fabian.kosmale@qt.io> | 2020-11-30 17:16:21 +0100 |
commit | d27d2b5d72acb2a3be55d0af9ded4cd126a5f031 (patch) | |
tree | 3bfeee6cf74782a197db3c604367e63031528ede /src/corelib | |
parent | 26e1a0997e1494433e43355cb56c05543ac56b5c (diff) |
QMetaProperty::typeName: use name from metatype
Except for types marked as unresolved, we're doing it anyway - the only
difference is that now we skip looking up the metatype by typeid.
[ChangeLog][QMetaProperty][Important Behavior Change]
QMetaProperty::typeName returns now always the same name as name() of the
corresponding metatype. This can cause a change for enum properties
which were not fully-qualified.
Change-Id: I1f57743948b7262ac06095d3bbc838d620f6e481
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/kernel/qmetaobject.cpp | 3 | ||||
-rw-r--r-- | src/corelib/kernel/qmetaobjectbuilder.cpp | 15 |
2 files changed, 11 insertions, 7 deletions
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp index aaf8142638..fe6b4075ef 100644 --- a/src/corelib/kernel/qmetaobject.cpp +++ b/src/corelib/kernel/qmetaobject.cpp @@ -2934,6 +2934,9 @@ const char *QMetaProperty::typeName() const { if (!mobj) return nullptr; + // TODO: can the metatype be invalid for dynamic metaobjects? + if (const auto mt = metaType(); mt.isValid()) + return mt.name(); return rawTypeNameFromTypeInfo(mobj, data.type()); } diff --git a/src/corelib/kernel/qmetaobjectbuilder.cpp b/src/corelib/kernel/qmetaobjectbuilder.cpp index fcf6200f1b..ad7a8ce4ab 100644 --- a/src/corelib/kernel/qmetaobjectbuilder.cpp +++ b/src/corelib/kernel/qmetaobjectbuilder.cpp @@ -1337,14 +1337,15 @@ static int buildMetaObject(QMetaObjectBuilderPrivate *d, char *buf, // Output the properties in the class. Q_ASSERT(!buf || dataIndex == pmeta->propertyData); - for (const auto &prop : d->properties) { + for (QMetaPropertyBuilderPrivate &prop : d->properties) { int name = strings.enter(prop.name); - int typeInfo; - if (QtPrivate::isBuiltinType(prop.type)) - typeInfo = QMetaType::fromName(prop.type).id(); - else - typeInfo = IsUnresolvedType | strings.enter(prop.type); + // try to resolve the metatype again if it was unknown + if (!prop.metaType.isValid()) + prop.metaType = QMetaType::fromName(prop.type); + const int typeInfo = prop.metaType.isValid() + ? prop.metaType.id() + : IsUnresolvedType | strings.enter(prop.type); int flags = prop.flags; @@ -1437,7 +1438,7 @@ static int buildMetaObject(QMetaObjectBuilderPrivate *d, char *buf, if (buf) { meta->d.metaTypes = types; for (const auto &prop : d->properties) { - QMetaType mt = QMetaType::fromName(prop.type); + QMetaType mt = prop.metaType; *types = reinterpret_cast<QtPrivate::QMetaTypeInterface *&>(mt); types++; } |