diff options
author | Pierre-Yves Siret <gr3cko@gmail.com> | 2019-12-20 01:51:39 +0100 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2020-01-15 14:01:08 +0000 |
commit | 43e3c21a0bad9141b6c35cc4ee4a58b4d824462a (patch) | |
tree | 4d3c1cc3e0a84eb0fa6d53acba4019a849d19102 /tests | |
parent | 5a4ffa0de0ecc666a514ef60f0149a76d25b040d (diff) |
Add Q_GADGET Wrapper for QQmlProperty
This enable exposing a QQmlProperty as a value type to QML code.
Only object and name are exposed as a properties to keep it simple.
We might want later to expose the property of a Binding or a Behavior
as a property for complex usecases. This permits exposing it as one
self contained value instead of a pair of unrelated object and name.
Task-number: QTBUG-70964
Task-number: QTBUG-73892
Change-Id: I3a46212446f43f3a7e301943cb49d3a48c377de3
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/qml/qqmlvaluetypes/data/qmlproperty_read.qml | 9 | ||||
-rw-r--r-- | tests/auto/qml/qqmlvaluetypes/testtypes.h | 6 | ||||
-rw-r--r-- | tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp | 15 |
3 files changed, 30 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmlvaluetypes/data/qmlproperty_read.qml b/tests/auto/qml/qqmlvaluetypes/data/qmlproperty_read.qml new file mode 100644 index 0000000000..b9c9ee779b --- /dev/null +++ b/tests/auto/qml/qqmlvaluetypes/data/qmlproperty_read.qml @@ -0,0 +1,9 @@ +import Test 1.0 +import QtQml 2.0 + +MyTypeObject { + property QtObject colorPropertyObject: colorProperty.object + property string colorPropertyName: colorProperty.name + property QtObject invalidPropertyObject: invalidProperty.object + property string invalidPropertyName: invalidProperty.name +} diff --git a/tests/auto/qml/qqmlvaluetypes/testtypes.h b/tests/auto/qml/qqmlvaluetypes/testtypes.h index 798c96e188..e11d831236 100644 --- a/tests/auto/qml/qqmlvaluetypes/testtypes.h +++ b/tests/auto/qml/qqmlvaluetypes/testtypes.h @@ -71,6 +71,8 @@ class MyTypeObject : public QObject Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY changed) Q_PROPERTY(QColor invalidColor READ invalidColor CONSTANT) Q_PROPERTY(QVariant variant READ variant NOTIFY changed) + Q_PROPERTY(QQmlProperty colorProperty READ colorProperty CONSTANT) + Q_PROPERTY(QQmlProperty invalidProperty READ invalidProperty CONSTANT) public: MyTypeObject() : @@ -173,6 +175,10 @@ public: QVariant variant() const { return sizef(); } + QQmlProperty colorProperty() { return QQmlProperty(this, "color"); } + + QQmlProperty invalidProperty() const { return QQmlProperty(); } + void emitRunScript() { emit runScript(); } signals: diff --git a/tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp b/tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp index 3e9047cc5a..7c75743311 100644 --- a/tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp +++ b/tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp @@ -67,6 +67,7 @@ private slots: void color(); void variant(); void locale(); + void qmlproperty(); void bindingAssignment(); void bindingRead(); @@ -360,6 +361,20 @@ void tst_qqmlvaluetypes::locale() } } +void tst_qqmlvaluetypes::qmlproperty() +{ + QQmlComponent component(&engine, testFileUrl("qmlproperty_read.qml")); + MyTypeObject *object = qobject_cast<MyTypeObject *>(component.create()); + QVERIFY(object != nullptr); + + QCOMPARE(object->property("colorPropertyObject").value<QObject *>(), object); + QCOMPARE(object->property("colorPropertyName").toString(), "color"); + QCOMPARE(object->property("invalidPropertyObject").value<QObject *>(), nullptr); + QCOMPARE(object->property("invalidPropertyName").toString(), ""); + + delete object; +} + void tst_qqmlvaluetypes::sizereadonly() { { |