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>bb10
parent
130b209014
commit
465701bb98
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in New Issue