summaryrefslogtreecommitdiffstats
path: root/src/corelib
diff options
context:
space:
mode:
authorFabian Kosmale <fabian.kosmale@qt.io>2020-11-18 16:35:20 +0100
committerFabian Kosmale <fabian.kosmale@qt.io>2020-11-30 17:16:21 +0100
commitd27d2b5d72acb2a3be55d0af9ded4cd126a5f031 (patch)
tree3bfeee6cf74782a197db3c604367e63031528ede /src/corelib
parent26e1a0997e1494433e43355cb56c05543ac56b5c (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.cpp3
-rw-r--r--src/corelib/kernel/qmetaobjectbuilder.cpp15
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++;
}