From 465701bb98f3c3454d15c22b8e38ab4ad8821dfc Mon Sep 17 00:00:00 2001 From: Fabian Kosmale Date: Wed, 18 Nov 2020 10:41:39 +0100 Subject: QMetaPropertyBuilder: carry metatype Properties of non-dynamic classes always have the metatype stored, so we can make use of it. Moreover, when the builder is converted into a metaobject, we need to resolve the metatype anyway. As a driveby, add a dedicated metatype test to tst_qmetaobjectbuilder. Change-Id: I7eea0cd8fc2da5d92c7fc803f05cd81e3a9d4cf4 Reviewed-by: Lars Knoll --- src/corelib/kernel/qmetaobjectbuilder.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'src/corelib/kernel/qmetaobjectbuilder.cpp') diff --git a/src/corelib/kernel/qmetaobjectbuilder.cpp b/src/corelib/kernel/qmetaobjectbuilder.cpp index 77a47d306c9..9abd52466fa 100644 --- a/src/corelib/kernel/qmetaobjectbuilder.cpp +++ b/src/corelib/kernel/qmetaobjectbuilder.cpp @@ -152,10 +152,11 @@ class QMetaPropertyBuilderPrivate { public: QMetaPropertyBuilderPrivate - (const QByteArray& _name, const QByteArray& _type, int notifierIdx=-1, + (const QByteArray& _name, const QByteArray& _type, QMetaType _metaType, int notifierIdx=-1, int _revision = 0) : name(_name), type(QMetaObject::normalizedType(_type.constData())), + metaType(_metaType), flags(Readable | Writable | Scriptable), notifySignal(notifierIdx), revision(_revision) { @@ -164,6 +165,7 @@ public: QByteArray name; QByteArray type; + QMetaType metaType; int flags; int notifySignal; int revision; @@ -555,9 +557,17 @@ QMetaMethodBuilder QMetaObjectBuilder::addConstructor(const QMetaMethod &prototy */ QMetaPropertyBuilder QMetaObjectBuilder::addProperty(const QByteArray &name, const QByteArray &type, int notifierId) +{ + return addProperty(name, type, QMetaType::fromName(name), notifierId); +} + +/*! + \overload + */ +QMetaPropertyBuilder QMetaObjectBuilder::addProperty(const QByteArray &name, const QByteArray &type, QMetaType metaType, int notifierId) { int index = int(d->properties.size()); - d->properties.push_back(QMetaPropertyBuilderPrivate(name, type, notifierId)); + d->properties.push_back(QMetaPropertyBuilderPrivate(name, type, metaType, notifierId)); return QMetaPropertyBuilder(this, index); } @@ -571,7 +581,7 @@ QMetaPropertyBuilder QMetaObjectBuilder::addProperty(const QByteArray &name, con */ QMetaPropertyBuilder QMetaObjectBuilder::addProperty(const QMetaProperty &prototype) { - QMetaPropertyBuilder property = addProperty(prototype.name(), prototype.typeName()); + QMetaPropertyBuilder property = addProperty(prototype.name(), prototype.typeName(), prototype.metaType()); property.setReadable(prototype.isReadable()); property.setWritable(prototype.isWritable()); property.setResettable(prototype.isResettable()); -- cgit v1.2.3