aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlproperty.cpp
diff options
context:
space:
mode:
authorStephen Kelly <stephen.kelly@kdab.com>2012-01-12 20:01:15 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-10 11:17:46 +0200
commit59ed8c355b99df0b949003a438ab850274261aa0 (patch)
tree7f019270e9e8457d385d94c6e8a9b1679b396fb2 /src/qml/qml/qqmlproperty.cpp
parentf20d726766bf5e875f96fc5ce8885afe5c3fae4a (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.cpp10
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);
}
/*!