summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qobject_p.h
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2012-05-17 11:02:59 +0100
committerQt by Nokia <qt-info@nokia.com>2012-05-18 10:36:42 +0200
commit276a86592a529eb0a1659764acaa4cf9f5e112a0 (patch)
treebf078acf86a4249b23b7cf048f6c5add3bbe2741 /src/corelib/kernel/qobject_p.h
parent6d7b003ac8381cf2af6ebcd255786d8e3afd21b8 (diff)
Encapsulate the dynamic meta object pointer
This change allows us to delay creating the actual meta object until it is actually required. Change-Id: I1c4a4226bd82fa606b206dd60322f49b49c32463 Reviewed-by: Kent Hansen <kent.hansen@nokia.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Diffstat (limited to 'src/corelib/kernel/qobject_p.h')
-rw-r--r--src/corelib/kernel/qobject_p.h17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h
index f650a301a7..8dd42d40b6 100644
--- a/src/corelib/kernel/qobject_p.h
+++ b/src/corelib/kernel/qobject_p.h
@@ -286,12 +286,23 @@ private:
void Q_CORE_EXPORT qDeleteInEventHandler(QObject *o);
+struct QAbstractDynamicMetaObject;
+struct Q_CORE_EXPORT QDynamicMetaObjectData
+{
+ virtual ~QDynamicMetaObjectData() {}
+ virtual void objectDestroyed(QObject *) { delete this; }
+
+ virtual QAbstractDynamicMetaObject *toDynamicMetaObject(QObject *) = 0;
+ virtual int metaCall(QObject *, QMetaObject::Call, int _id, void **) = 0;
+};
-struct Q_CORE_EXPORT QAbstractDynamicMetaObject : public QMetaObject
+struct Q_CORE_EXPORT QAbstractDynamicMetaObject : public QDynamicMetaObjectData, public QMetaObject
{
- virtual ~QAbstractDynamicMetaObject() {}
- virtual int metaCall(QMetaObject::Call, int _id, void **) { return _id; }
+ virtual QAbstractDynamicMetaObject *toDynamicMetaObject(QObject *) { return this; }
virtual int createProperty(const char *, const char *) { return -1; }
+ virtual int metaCall(QObject *, QMetaObject::Call c, int _id, void **a)
+ { return metaCall(c, _id, a); }
+ virtual int metaCall(QMetaObject::Call, int _id, void **) { return _id; } // Compat overload
};
QT_END_NAMESPACE