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
