Add documentation how to formulate a property binding
To correctly formulate a property binding, some rules must be followed. So far, these rules are not documented. This patch adds such documentation. Task-number: QTBUG-90511 Change-Id: Ibb509ea9098212c95f03433feb1f1aac751c4b2e Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Paul Wicking <paul.wicking@qt.io>
This commit is contained in:
parent
59b0212215
commit
30016562c2
@ -169,6 +169,44 @@
|
||||
Here, code triggered in change handlers might use the circle, while it has
|
||||
the new radius, but still the old area.
|
||||
|
||||
\section1 Formulating a Property Binding
|
||||
|
||||
Any C++ expression evaluating to the correct type can be used as a binding
|
||||
expression and be given to the setBinding() method. However, to formulate
|
||||
a correct binding, some rules must be followed.
|
||||
|
||||
Dependency tracking only works on bindable properties. It's the developer's
|
||||
responsibility to ensure that all properties used in the binding expression
|
||||
are bindable properties. When non-bindable properties are used in a binding
|
||||
expression, changes to those properties do not trigger updates to the bound
|
||||
property. No warning or error is generated either at compile-time or at run-time.
|
||||
The bound property will be updated only when bindable properties used in the
|
||||
binding expression are changed.
|
||||
Non-bindable properties might be used in a binding if it's possible
|
||||
to ensure that markDirty is called on the property being bound on each
|
||||
change of the non-bindable dependency.
|
||||
|
||||
The bound property might evaluate its binding several times during its lifetime.
|
||||
The developer must make sure that all objects used in the binding expression
|
||||
live longer than the binding.
|
||||
|
||||
The bindable property system is not thread-safe. Properties used in the binding
|
||||
expression on one thread must not be read or modified by any other thread.
|
||||
An object of a QObject-derived class which has a property with a binding must
|
||||
not be moved to a different thread.
|
||||
Also, an object of a QObject-derived class which has a property which is used
|
||||
in a binding must not be moved to a different thread. In this context, it's
|
||||
irrelevant whether it's used in a binding of a property in the same object
|
||||
or in a binding of a property in another object.
|
||||
|
||||
The binding expression should not read from the property it's a binding for. Otherwise,
|
||||
an evaluation loop exists.
|
||||
|
||||
The binding expression must not write to the property it's a binding for.
|
||||
|
||||
Functions used as bindings as well as all code which is called inside a binding
|
||||
must not co_await. Doing so can confuse the property system's tracking of dependencies.
|
||||
|
||||
\section1 Tracking Bindable Properties
|
||||
|
||||
Sometimes the relationships between properties cannot be expressed using
|
||||
|
@ -1042,6 +1042,8 @@ QString QPropertyBindingError::description() const
|
||||
is read, the binding is evaluated by invoking the call operator () of \a f.
|
||||
Whenever a dependency of the binding changes, the binding will be re-evaluated
|
||||
the next time the value of this property is read.
|
||||
|
||||
\sa {Formulating a Property Binding}
|
||||
*/
|
||||
|
||||
/*!
|
||||
@ -1441,6 +1443,8 @@ QString QPropertyBindingError::description() const
|
||||
Whenever a dependency of the binding changes, the binding will be re-evaluated
|
||||
the next time the value of this property is read. When the property value
|
||||
changes, the owner is notified via the Callback function.
|
||||
|
||||
\sa {Formulating a Property Binding}
|
||||
*/
|
||||
|
||||
/*!
|
||||
@ -1667,6 +1671,8 @@ QString QPropertyBindingError::description() const
|
||||
|
||||
Returns any previous binding associated with the property, or a
|
||||
default-constructed QPropertyBinding<T>.
|
||||
|
||||
\sa {Formulating a Property Binding}
|
||||
*/
|
||||
|
||||
/*!
|
||||
|
Loading…
Reference in New Issue
Block a user