diff options
-rw-r--r-- | src/corelib/kernel/qmetaobjectbuilder.cpp | 16 | ||||
-rw-r--r-- | src/corelib/kernel/qmetaobjectbuilder_p.h | 1 | ||||
-rw-r--r-- | tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp | 20 |
3 files changed, 34 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()); diff --git a/src/corelib/kernel/qmetaobjectbuilder_p.h b/src/corelib/kernel/qmetaobjectbuilder_p.h index d0d4867d8b..ea953756db 100644 --- a/src/corelib/kernel/qmetaobjectbuilder_p.h +++ b/src/corelib/kernel/qmetaobjectbuilder_p.h @@ -125,6 +125,7 @@ public: QMetaMethodBuilder addConstructor(const QMetaMethod& prototype); QMetaPropertyBuilder addProperty(const QByteArray& name, const QByteArray& type, int notifierId=-1); + QMetaPropertyBuilder addProperty(const QByteArray& name, const QByteArray& type, QMetaType metaType, int notifierId=-1); QMetaPropertyBuilder addProperty(const QMetaProperty& prototype); QMetaEnumBuilder addEnumerator(const QByteArray& name); diff --git a/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp b/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp index 2660c1a53c..cec7c7198f 100644 --- a/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp +++ b/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp @@ -64,6 +64,8 @@ private slots: void classNameFirstInStringData(); + void propertyMetaType(); + private: static bool checkForSideEffects (const QMetaObjectBuilder& builder, @@ -1688,6 +1690,24 @@ void tst_QMetaObjectBuilder::classNameFirstInStringData() free(mo); } +struct MyFoo {}; + +void tst_QMetaObjectBuilder::propertyMetaType() +{ + QMetaType meta = QMetaType::fromType<MyFoo>(); + auto metaId = meta.id(); + QMetaObjectBuilder builder; + builder.setClassName("Test"); + builder.addProperty("test", "MyFoo"); + auto mo = builder.toMetaObject(); + + QMetaProperty metaProp = mo->property(mo->indexOfProperty("test")); + QCOMPARE(metaProp.typeName(), meta.name()); + QCOMPARE(metaProp.typeId(), metaId); + QCOMPARE(metaProp.metaType(), meta); + free(mo); +} + QTEST_MAIN(tst_QMetaObjectBuilder) #include "tst_qmetaobjectbuilder.moc" |