[Development] Property bindings in Qt 6

Olivier Goffart olivier at woboq.com
Thu Sep 26 22:50:14 CEST 2019


On 26.09.19 20:50, Ville Voutilainen wrote:
> On Thu, 26 Sep 2019 at 21:08, Pierre-Yves Siret <py.siret at gmail.com> wrote:
>>
>> I feel like custom getters and the ability to mark a property dirty are needed too.
>>
>> You might have a property that's provided by an outside system, and you maybe don't want to query it every time it changes, only when there's an observer bound to that property.
>>
>> About the
>>      QProperty<QString> fullname;
>>      fullname.setBinding([&]() { return surname() + " " + lastname(); });
>>
>> Does it store a QString internally and modify it whenever surname & lastname changes thus taking some space in memory or is it just evaluated lazily and never stored?
> 
> Based on my reading of the code, it does store a QString, but it will
> modify it only if you get the property's value at least once. Also,
> based on my reading, subsequent
> modifications happen only if the dependent properties are changed,
> since it bookkeeps dependency tracking information via thread-local
> binding state,
> which is the magic bit that makes lazy evaluation of the dependencies
> tick. The lambda passed to setBinding looks like it's executing
> arbitrary code that has no statements
> of dependencies, but due to the thread_local state, the dependencies
> are tracked automatically.
> 
> Right, Simon?

That's right.

As for the getter/setter,  in addition to what Thiago suggests, we could also 
add template parameters with customization points.



More information about the Development mailing list