summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qmetaobjectbuilder.cpp
diff options
context:
space:
mode:
authorFabian Kosmale <fabian.kosmale@qt.io>2020-11-18 10:41:39 +0100
committerFabian Kosmale <fabian.kosmale@qt.io>2020-11-30 17:16:20 +0100
commit465701bb98f3c3454d15c22b8e38ab4ad8821dfc (patch)
tree526f5ee1cd63be0aecc7c454d8aeccb577a351e8 /src/corelib/kernel/qmetaobjectbuilder.cpp
parent130b2090147e0d28e35fd736fbefcd588c0014f6 (diff)
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 <lars.knoll@qt.io>
Diffstat (limited to 'src/corelib/kernel/qmetaobjectbuilder.cpp')
-rw-r--r--src/corelib/kernel/qmetaobjectbuilder.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/corelib/kernel/qmetaobjectbuilder.cpp b/src/corelib/kernel/qmetaobjectbuilder.cpp
index 77a47d306c..9abd52466f 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;
@@ -556,8 +558,16 @@ 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());