QProperty: Allow manual scheduling of binding notification

In some situation we want to notify even if the value didn't change.

Task-number: QTBUG-101771
Change-Id: I7d82a9f6e0f7d5eb48065e3f428b814939181ea8
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
(cherry picked from commit 908ee8aab1d9b5d022cadb23d23de56ca72570e9)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Ulf Hermann 2022-03-21 10:48:38 +01:00 committed by Qt Cherry-pick Bot
parent 7a5ca30587
commit 5c4be5351e
2 changed files with 17 additions and 0 deletions

View File

@ -242,6 +242,7 @@ public:
bool isUpdating() {return updating;}
void setSticky(bool keep = true) {m_sticky = keep;}
bool isSticky() {return m_sticky;}
void scheduleNotify() {pendingNotify = true;}
QPropertyBindingPrivate(QMetaType metaType, const QtPrivate::BindingFunctionVTable *vtable,
const QPropertyBindingSourceLocation &location, bool isQQmlPropertyBinding=false)

View File

@ -117,6 +117,7 @@ private slots:
void selfBindingShouldNotCrash();
void qpropertyAlias();
void scheduleNotify();
};
void tst_QProperty::functorBinding()
@ -1874,6 +1875,21 @@ void tst_QProperty::qpropertyAlias()
QVERIFY(!alias.isValid());
}
void tst_QProperty::scheduleNotify()
{
int notifications = 0;
QProperty<int> p;
QCOMPARE(p.value(), 0);
const auto handler = p.addNotifier([&](){ ++notifications; });
QCOMPARE(notifications, 0);
QPropertyBinding<int> b([]() { return 0; }, QPropertyBindingSourceLocation());
QPropertyBindingPrivate::get(b)->scheduleNotify();
QCOMPARE(notifications, 0);
p.setBinding(b);
QCOMPARE(notifications, 1);
QCOMPARE(p.value(), 0);
}
QTEST_MAIN(tst_QProperty);
#undef QT_SOURCE_LOCATION_NAMESPACE