With help from IRC I submitted regression Bug:
https://bugreports.qt.io/browse/QTBUG-66945


2018-03-08 8:25 GMT+01:00 Tomasz Olszak <[email protected]>:
> The same behavior is when tmp1 is initialized with C++ function.
> Function is called twice too.
>
> 2018-03-08 8:15 GMT+01:00 Tomasz Olszak <[email protected]>:
>> Hi thanks for feedback,
>>
>> I agree that putting everything in Component.onCompleted would be
>> worse workaround
>> than changing order but more explicit. On the other hand it is a lot
>> less declarative.
>>
>> In my application I build different kinds of settings using list of objects 
>> or
>> strings. I encountered this issue while building list of Time Zones. The Item
>> that contained this list was instantiated in more than a second. Then I 
>> realized
>> that the function that creates and filters list is called twice. There are
>> numerous places in my application that uses function to initialize object
>> properties.
>>
>> Moreover if I change tmp0 to: "property int tmp0: tmp1 + 1"
>> getTmp1Value is still called twice which seems like a bug.
>> AFAIK Qt knows dependencies between bindings because it triggers reevaluation
>> in dependent property has changed. Seems like this dependency is ignored 
>> during
>> initialization phase. Depending on complexity and duration of execution of
>> bindings expression instantiation of component can be almost twice longer
>> without any explicit cause.
>>
>> Am I right or missing something?
>>
>> 2018-03-08 4:53 GMT+01:00 Jason H <[email protected]>:
>>>
>>> I can see your point. But tmp1 is not changing during the first property 
>>> init, so it won't be evaluated. The way to work around this order-specifc 
>>> init is to do it explicitly in a Component.onCompleted
>>>
>>> Sent: Wednesday, March 07, 2018 at 4:25 AM
>>> From: "Tomasz Olszak" <[email protected]>
>>> To: [email protected]
>>> Subject: [Development] Is Qt Quick Item properties order significant?
>>> Hello,
>>>
>>> I'm writing here because I don't know if it is a bug or intended behavior 
>>> and I should look more carefully in docs (haven't found anything mentioning 
>>> it yet).
>>>
>>> Please consider 2 examples (can be pasted anywhere - you will see logs from 
>>> object initialization):
>>> Item {
>>>     property int tmp0: getTmp0Value(tmp1)
>>>     property int tmp1: getTmp1Value()
>>>     function getTmp1Value() {
>>>         console.log("getTmp1Value should be called only once and before 
>>> getTmp0Value");
>>>         return 1;
>>>     }
>>>     function getTmp0Value(arg) {
>>>         console.log("getTmp0Value should be called only once and aftere 
>>> getTmp1Value");
>>>         return arg + 1;
>>>     }
>>> }
>>>
>>> And with small modification (order of properties has changed):
>>> Item {
>>>    property int tmp1: getTmp1Value()
>>>    property int tmp0: getTmp0Value(tmp1)
>>>    ....
>>> }
>>>
>>>
>>> First one calls getTmp1Value twice, second one - as expected only once. 
>>> Seems like when tmp0 is initialized it does not initialize tmp1 first as 
>>> dependency but takes expression binding from tmp1 executes it and assign 
>>> result to tmp0, then executes the same expression for tmp1 to initialize it.
>>>
>>> Is it a bug or do I miss something?
>>>
>>> Tomek
>>>
>>>
>>> _______________________________________________ Development mailing list 
>>> [email protected] 
>>> http://lists.qt-project.org/mailman/listinfo/development
_______________________________________________
Development mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to