summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qobject_p.h
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2021-10-06 10:26:23 +0200
committerUlf Hermann <ulf.hermann@qt.io>2021-10-07 12:54:10 +0200
commit5d174877234477a59eb29818d3cfb99fedc3e704 (patch)
tree6131169395c5c33f3633ee21b5c13dc28435620b /src/corelib/kernel/qobject_p.h
parent1453f048f535d98ea2454462875eed77a966bcde (diff)
Return a plain QMetaObject* from toDynamicMetaObject()
The only place where we use it, we swiftly cast it to QMetaObject* anyway. Generating an object with virtual methods, only to then cast to its non-virtual base type is dangerous. Also, if we are required to return a QAbstractDynamicMetaObject from a method of QDynamicMetaObjectData, we cannot implement QDynamicMetaObjectData without also implementing QAbstractDynamicMetaObject. This indirectly forces us to copy metaobjects around as we cannot wrap an existing metaobject into a QDynamicMetaObjectData subclass. Copying metaobjects around makes QMetaObject::inherits() unusable because inherits() assumes identity is determined by identity of the pointer. Change-Id: Icbe697efa6fd66649eef3c91260c95cda62e3c90 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/corelib/kernel/qobject_p.h')
-rw-r--r--src/corelib/kernel/qobject_p.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h
index c119fdfe7e..da171f5c7f 100644
--- a/src/corelib/kernel/qobject_p.h
+++ b/src/corelib/kernel/qobject_p.h
@@ -656,7 +656,7 @@ struct Q_CORE_EXPORT QDynamicMetaObjectData
virtual ~QDynamicMetaObjectData();
virtual void objectDestroyed(QObject *) { delete this; }
- virtual QAbstractDynamicMetaObject *toDynamicMetaObject(QObject *) = 0;
+ virtual QMetaObject *toDynamicMetaObject(QObject *) = 0;
virtual int metaCall(QObject *, QMetaObject::Call, int _id, void **) = 0;
};
@@ -664,7 +664,7 @@ struct Q_CORE_EXPORT QAbstractDynamicMetaObject : public QDynamicMetaObjectData,
{
~QAbstractDynamicMetaObject();
- QAbstractDynamicMetaObject *toDynamicMetaObject(QObject *) override { return this; }
+ QMetaObject *toDynamicMetaObject(QObject *) override { return this; }
virtual int createProperty(const char *, const char *) { return -1; }
int metaCall(QObject *, QMetaObject::Call c, int _id, void **a) override
{ return metaCall(c, _id, a); }