[Development] Qml/Quick Designe Decision Wiki or how to avoid generating work for other stakeholders

Thomas Hartmann Thomas.Hartmann at digia.com
Thu Jul 4 09:32:28 CEST 2013


Hi,

> We could add a "states" convenience property with ease. Would that be
> sufficient to make it a "y" in this explanation?

I think this is a good idea. For the designer we could just work around 
it by creating a StateGroup, but I think adding a states and transitions 
property to ApplicationWindow makes the API more consistent.
We should ask for other opinions, though.

> states/transitions have nothing actually to do with Item, we just
> added those properties onto Item for convenience. So if it's common
> enough that people want to define states/transitions on a window then
> I see no issue with adding additional convenience. It's just a thin
> wrapper around the StateGroup type anyways. We do want to provide
> extreme convenience, like the default properties which Simon likes so
> much :) .

Yes. The concept of default properties is very powerful and adds a lot 
of convenience. But it is also tricky sometimes, because the parent in 
the text QML tree is not the parent in the actual SceneGraph/Item tree 
any more.

> ApplicationWindow is going to be a fixed root item in terms of how
> it's used. Most users are going to use ApplicationWindow, not Window
> (which is not always a fixed root item, but perhaps could be treated
> as such in the design mode?), so that's the case we need to fix.

This is what we actually do. ApplicationWindow/Window can be the root 
item, but nothing else in the design mode.

> We have this same "half-hidden-content-item-redirection" in Flickable,
> the only difference is that Flickable is actually an Item as well. How
> do we solve this for anchors/transformations inside a Flickable onto
> the "parent"?

We track these cases by running the parent chain until we find the 
"actual" Item (in this case Flickable). We also do take care of 
transformations.

There is one big issue, though. To avoid usability issues/flickering
we have to know the transformation beforehand. This means we have to 
know the transformation before we actually reparent the item.
The current solution is that we "advise" components to have a 
contentItem for these cases. Then we can check the transformation to the 
contentItem beforehand.
This is how it is done for GroupBox. If there is a transformation and no 
contentItem is defined items will "jump" when reparented.

In the near future I will collect these kind of requirements of 
components for the designer. Actually I only know of one other issue. 
Components often assume that some properties are fixed after component 
complete is called. While for applications this assumption is usually 
valid it breaks in the designer.

In a way both these problems were also relevant in the widget case and 
are not QML specific. The widget designer also has to know about "non 
standard ways" to add child widgets like addWidget() and widgets also 
have to gracefully handle use cases which are only relevant for the 
designer.
QWidget was lacking component complete though and the imperative C++ API 
implies that also normal users set properties in an unexpected order and 
such.
While I think component complete is necessary (I even requested it back 
when I started to try QML), I would prefer if in the future it is used 
for real special cases and for all the standard cases we would rely on 
signal compression in the engine.

About the default property alias to a contentItem, I would like to see a 
standard pattern, so we do not haven to tool dozens of exceptions.
Hinting the content item by exposing it as either "contentItem" or 
"__contentItem" is a good start.

Kind Regards,
Thomas Hartmann




More information about the Development mailing list