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
