[Interest] Qml Loader initial property setter

Jérôme Godbout jerome at bodycad.com
Wed Apr 13 15:17:23 CEST 2016


I agree, this would be difficult to know if this should create a binding or
simply copy the current value. This is why I was proposing the function
where we could go with either = or Qt.binding() to have full control on it.
Nice to see this was there at some point, I wonder why they removed it or
never integrate it.

On Wed, Apr 13, 2016 at 2:07 AM, Sina Dogru <sinadooru at gmail.com> wrote:

> It's sad that the imperative setSource() function can set those property
>> and the declarative way is not.
>>
>
> It would also be great but to make something a property instead of a
> function where it is much easier, then there should be a public and
> QMetaType known type.Thats why seems like hard to make it possible.
>
> 2016-04-04 16:31 GMT+03:00 Jérôme Godbout <jerome at bodycad.com>:
>
>> Thanks for pointing this out, but I was aware of that. Sometime a default
>> value is impossible (null) making bad behavior or bad binding, primitive
>> type can always have default value that make sense that way but complex
>> object don't.
>> It's sad that the imperative setSource() function can set those property
>> and the declarative way is not.
>>
>> On Sun, Apr 3, 2016 at 11:10 AM, ekke <ekke at ekkes-corner.org> wrote:
>>
>>> if you want to refer to a property as 'model.i' and there are situations
>>> where 'model' doesn't exist always,
>>> it's easy to avoid error messages:
>>>
>>> model? model.i : 42
>>>
>>> this way you can set a default value while model is null
>>> (haven't tried this yet with Qt 5.6 but I'm doing it this way in
>>> BlackBerry 10 Cascades)
>>>
>>> ekke
>>>
>>> Am 01.04.16 um 16:05 schrieb Jérôme Godbout:
>>>
>>> Yes, but the binding loaded object internal binding are printing error,
>>> since the object is created without the input, then the external binding
>>> are created. They will get eventually correct, but the console will be
>>> filled with error message and I try to avoid that at all cost. Here's a
>>> simple example that will complain about unable to access i and j of
>>> undefined / assign undefined to width and height (this example is a bit
>>> stupid but just a demo to show the problems with more complex model and
>>> object):
>>>
>>> // MyComponent.qml
>>> Item
>>> {
>>>  property var model
>>>  width: model.i
>>>  height: model.j
>>> }
>>>
>>> // Main.qml
>>> MyModel
>>> {
>>>   id: myModel_
>>>   property int i: 24
>>>   property int j: 12
>>> }
>>>
>>> Loader
>>> {
>>>   id: loader_
>>>   source: "MyComponent.qml"
>>> }
>>>
>>> Binding
>>> {
>>>   target: loader_.item
>>>   property: 'model'
>>>   value: myModel_
>>>   when: loader_.status == Loader.Ready
>>> }
>>>
>>> What I would like is the Loader call QQmlComponent::beginCreate(), then
>>> having a hook to init some property then the Loader can finish the
>>> component QQmlComponent::completeCreate(). This way I was able to make it
>>> work, but having a custom component for that is a bit annoying.
>>>
>>> Loader
>>> {
>>>   source: "MyComponent.qml"
>>>   onInitProperty:  // signal emit with component object returned by
>>> beginCreate(),
>>>   {
>>>     object.model = Qt.binding(function(){ return myModel_; });
>>>     ...
>>>   }
>>> }
>>>
>>> That seem clean and would avoid the problems to have object into bad
>>> state for a brief moment.
>>>
>>> Jerome
>>>
>>> On Fri, Apr 1, 2016 at 12:04 AM, Shantanu Tushar <shaan7in at gmail.com>
>>> wrote:
>>>
>>>> Hi,
>>>>
>>>> Have you tried using the QML Binding Type?
>>>> <http://doc.qt.io/qt-5/qml-qtqml-binding.html>
>>>> http://doc.qt.io/qt-5/qml-qtqml-binding.html
>>>>
>>>> On Thu, Mar 24, 2016 at 11:11 PM, Jérôme Godbout < <jerome at bodycad.com>
>>>> jerome at bodycad.com> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> I was wondering if I am the only one who found the initial property of
>>>>> a source based Loader Item a bit annoying. inline sourceComponent with
>>>>> Component {} declaration are well ok on the other hand. I'm explaining
>>>>> myself, when using a loader you have 2 choice to set the initial binding on
>>>>> created item:
>>>>>
>>>>> 1- On item changed set the binding
>>>>>
>>>>> *Loader*
>>>>> *{*
>>>>> *  source: externalObj.getSrc() // return something like "myItem.qml"*
>>>>> *  onItemChanged:*
>>>>> *  {*
>>>>> *    if(!item) return;*
>>>>> *    item.myprop = Qt.binding(function(){ return myExternalProperty;
>>>>> })*
>>>>> *  }*
>>>>> *}*
>>>>>
>>>>> 2- use the setSource() function instead of the source directly
>>>>>
>>>>> *Loader*
>>>>> *{*
>>>>> *  property url myDummySrc: externalObj.getSrc()*
>>>>> *  onMyDummySrcChanged:*
>>>>> *  {*
>>>>> *     setSource(myDummySrc, { 'myprop': Qt.binding(function(){ return
>>>>> myExternalProperty; }) });*
>>>>> *  }*
>>>>> *}*
>>>>>
>>>>> This is rather annoying and ugly. Number 1 is also having the problem
>>>>> where *myItem.qml* must be able to handle *myprop *to have a default
>>>>> value or being empty without output a lots of console error. Number 2 work
>>>>> well and is the solution I find myself writing often. I was wondering if a
>>>>> Loader that support a dictionary of initial property when source changed
>>>>> would be nice:
>>>>>
>>>>> *Loader*
>>>>> *{*
>>>>> *  source: externalObj.getSrc()*
>>>>> *  initialProperties: { 'myprop': Qt.binding(function(){ return
>>>>> myExternalProperty; })  }*
>>>>> *}*
>>>>>
>>>>> What do you think?
>>>>> Jerome
>>>>>
>>>>> _______________________________________________
>>>>> Interest mailing list
>>>>> Interest at qt-project.org
>>>>> http://lists.qt-project.org/mailman/listinfo/interest
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Shantanu Tushar    (UTC +0530)
>>>> shantanu.io
>>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Interest mailing listInterest at qt-project.orghttp://lists.qt-project.org/mailman/listinfo/interest
>>>
>>>
>>>
>>> _______________________________________________
>>> Interest mailing list
>>> Interest at qt-project.org
>>> http://lists.qt-project.org/mailman/listinfo/interest
>>>
>>>
>>
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/interest
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20160413/94f8b81e/attachment.html>


More information about the Interest mailing list