Yes, I would like to thank Simon and Mitch for taking care of this. The prospect of spending few days on reviewing code and rearranging properties was not making me happy :)
2018-03-09 1:44 GMT+01:00 Jason H <[email protected]>: > Neat! I've never seen a patch land that fast! I'm going to be happy with this > one! > > >> Sent: Thursday, March 08, 2018 at 7:11 AM >> From: "Tomasz Olszak" <[email protected]> >> To: No recipient address >> Cc: [email protected] >> Subject: Re: [Development] Is Qt Quick Item properties order significant? >> >> 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 >> _______________________________________________ Development mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/development
