> -----Original Message----- > From: Development [mailto:development-bounces+mitch.curtis=qt.io@qt- > project.org] On Behalf Of Tomasz Olszak > Sent: Friday, 9 March 2018 10:13 AM > Cc: [email protected] > Subject: Re: [Development] Is Qt Quick Item properties order significant? > > Yes, I would like to thank Simon and Mitch for taking care of this.
I did nothing, all props go to Simon. :) > 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 _______________________________________________ Development mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/development
