QBindable: Disallow mutation if read-only
If a QBindable is created from a computed property, it is not possible to actually set a value or a binding. If we try to do it anyway, we'd get a crash. Thus we now check whether the function pointer is null before invoking it. Task-number: QTBUG-87153 Change-Id: I5bedb9080ccf79d9b8166b80d5733d095ed76f8d Reviewed-by: Lars Knoll <lars.knoll@qt.io> (cherry picked from commit e236faa75f446aa3378fb013cce6598c9e076ccb) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
3f94498303
commit
87409ce000
@ -630,7 +630,7 @@ public:
|
|||||||
QPropertyBinding<T> setBinding(const QPropertyBinding<T> &binding)
|
QPropertyBinding<T> setBinding(const QPropertyBinding<T> &binding)
|
||||||
{
|
{
|
||||||
Q_ASSERT(!iface || binding.isNull() || binding.valueMetaType() == iface->metaType());
|
Q_ASSERT(!iface || binding.isNull() || binding.valueMetaType() == iface->metaType());
|
||||||
return iface ? static_cast<QPropertyBinding<T> &&>(iface->setBinding(data, binding)) : QPropertyBinding<T>();
|
return (iface && iface->setBinding) ? static_cast<QPropertyBinding<T> &&>(iface->setBinding(data, binding)) : QPropertyBinding<T>();
|
||||||
}
|
}
|
||||||
#ifndef Q_CLANG_QDOC
|
#ifndef Q_CLANG_QDOC
|
||||||
template <typename Functor>
|
template <typename Functor>
|
||||||
@ -657,7 +657,7 @@ public:
|
|||||||
|
|
||||||
void setValue(const T &value)
|
void setValue(const T &value)
|
||||||
{
|
{
|
||||||
if (iface)
|
if (iface && iface->setter)
|
||||||
iface->setter(data, &value);
|
iface->setter(data, &value);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1114,6 +1114,11 @@ void tst_QProperty::testNewStuff()
|
|||||||
object.readData.setValue(111);
|
object.readData.setValue(111);
|
||||||
QCOMPARE(object.computed(), 111);
|
QCOMPARE(object.computed(), 111);
|
||||||
|
|
||||||
|
object.bindableComputed().setBinding(object.bindableBar().makeBinding());
|
||||||
|
QCOMPARE(object.computed(), 111);
|
||||||
|
object.bindableComputed().setValue(10);
|
||||||
|
QCOMPARE(object.computed(), 111);
|
||||||
|
|
||||||
QCOMPARE(object.bindableFoo().value(), 111);
|
QCOMPARE(object.bindableFoo().value(), 111);
|
||||||
object.bindableFoo().setValue(24);
|
object.bindableFoo().setValue(24);
|
||||||
QCOMPARE(object.foo(), 24);
|
QCOMPARE(object.foo(), 24);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user