diff options
author | Fabian Kosmale <fabian.kosmale@qt.io> | 2020-12-03 15:21:58 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2020-12-03 23:08:41 +0000 |
commit | 5d7468d56f9c9100e613d4c3516394b5983e6291 (patch) | |
tree | f63dd6ac5d9aa269a007dbfd9fa7e538c916a43a /tests | |
parent | bb50209308c3d82dd9c4c3f4c07f833f8c7638ff (diff) |
QML engine: Fix binding setup
We set QProperty bindings up in the wrong way: Parent components would
overwrite their child component's binding. This patch reverses the
order, fixing the bug.
Task-number: QTBUG-87153
Change-Id: I3e90d1d14a41a7c5c337745f1453484d360a3979
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
(cherry picked from commit 96e321bc5cf3c1a6d52374a6f4070a438032b08d)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'tests')
4 files changed, 33 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmlecmascript/data/QPropertyBase.qml b/tests/auto/qml/qqmlecmascript/data/QPropertyBase.qml new file mode 100644 index 0000000000..40f29f589e --- /dev/null +++ b/tests/auto/qml/qqmlecmascript/data/QPropertyBase.qml @@ -0,0 +1,5 @@ +import Qt.test 1 +ClassWithQProperty { + value2: 42 + value: value2 +} diff --git a/tests/auto/qml/qqmlecmascript/data/QPropertyOverwrite.qml b/tests/auto/qml/qqmlecmascript/data/QPropertyOverwrite.qml new file mode 100644 index 0000000000..fd8b2c3dfd --- /dev/null +++ b/tests/auto/qml/qqmlecmascript/data/QPropertyOverwrite.qml @@ -0,0 +1,11 @@ +import Qt.test 1 + +ClassWithQProperty { + id: root + value: 13 + + property QPropertyBase prop: QPropertyBase { + objectName: "test" + value: root.value + } +} diff --git a/tests/auto/qml/qqmlecmascript/testtypes.h b/tests/auto/qml/qqmlecmascript/testtypes.h index 159038f851..7074ffaa10 100644 --- a/tests/auto/qml/qqmlecmascript/testtypes.h +++ b/tests/auto/qml/qqmlecmascript/testtypes.h @@ -1732,9 +1732,12 @@ struct ClassWithQProperty : public QObject { Q_OBJECT Q_PROPERTY(float value MEMBER value BINDABLE bindableValue) + Q_PROPERTY(float value2 MEMBER value2 BINDABLE bindableValue2) public: QProperty<float> value; + QProperty<float> value2; QBindable<float> bindableValue() { return QBindable<float>(&value); } + QBindable<float> bindableValue2() { return QBindable<float>(&value2); } }; class VariantConvertObject : public QObject diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp index d7cb85a75d..37e3a33442 100644 --- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp +++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp @@ -382,6 +382,7 @@ private slots: void semicolonAfterProperty(); void hugeStack(); void bindingOnQProperty(); + void overwrittenBindingOnQProperty(); void aliasOfQProperty(); void bindingOnQPropertyContextProperty(); void bindingContainingQProperty(); @@ -9182,6 +9183,19 @@ void tst_qqmlecmascript::bindingOnQProperty() QVERIFY(qprop.hasBinding()); } +void tst_qqmlecmascript::overwrittenBindingOnQProperty() +{ + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("QPropertyOverwrite.qml")); + QVERIFY2(component.isReady(), qPrintable(component.errorString())); + QScopedPointer<QObject> root(component.create()); + auto test = root->findChild<ClassWithQProperty *>("test"); + QVERIFY(test); + QCOMPARE(test->value.value(), 13.f); + root->setProperty("value", 14.f); + QCOMPARE(test->value.value(), 14.0); +} + void tst_qqmlecmascript::aliasOfQProperty() { QQmlEngine engine; QQmlComponent component(&engine, testFileUrl("aliasOfQProperty.qml")); |