diff options
author | Stephen Kelly <stephen.kelly@kdab.com> | 2012-01-12 20:01:15 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-10 11:17:46 +0200 |
commit | 59ed8c355b99df0b949003a438ab850274261aa0 (patch) | |
tree | 7f019270e9e8457d385d94c6e8a9b1679b396fb2 /src/qml/qml/qqmlproperty.cpp | |
parent | f20d726766bf5e875f96fc5ce8885afe5c3fae4a (diff) |
Make it possible to handle pointers to QObject derived in QML.
This way, properties of QObject derived types can be read in QML
code for example:
Q_PROPERTY(MyObject* obj READ obj CONSTANT)
Previously, only QObject* types could be read by QML:
Q_PROPERTY(QObject* obj READ obj CONSTANT)
This meant that multiple properties and methods had to be created
for classes which were relevant to both QML and non-QML code.
This patch lifts that restriction.
As a consequence, we can also remove a Q_EXPECT_FAIL from
the qqmllanguage unit test. That test was introduced in
commit 92562eacbc3c (Allow signal parameters which are custom QML
object-types, 2012-07-13) to document knowledge of the limitation
while fixing it as much as possible.
Task-number: QTBUG-26662
Change-Id: Ic85fa73c6f3655189438ec509765bae2eab9993a
Reviewed-by: Alan Alpert (Personal) <416365416c@gmail.com>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/qml/qqmlproperty.cpp')
-rw-r--r-- | src/qml/qml/qqmlproperty.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/qml/qml/qqmlproperty.cpp b/src/qml/qml/qqmlproperty.cpp index d1ecfdc52d..cf1b5ffd18 100644 --- a/src/qml/qml/qqmlproperty.cpp +++ b/src/qml/qml/qqmlproperty.cpp @@ -1611,10 +1611,14 @@ QQmlMetaObject QQmlPropertyPrivate::rawMetaObjectForType(QQmlEnginePrivate *engi { if (engine) { return engine->rawMetaObjectForType(userType); - } else { - QQmlType *type = QQmlMetaType::qmlType(userType); - return QQmlMetaObject(type?type->baseMetaObject():0); } + QQmlType *type = QQmlMetaType::qmlType(userType); + if (type) + return QQmlMetaObject(type->baseMetaObject()); + QMetaType metaType(userType); + if ((metaType.flags() & QMetaType::PointerToQObject) && metaType.metaObject()) + return metaType.metaObject(); + return QQmlMetaObject((QObject*)0); } /*! |