[Qt-qml] Comments to API of RowLayout/ ColumnLayout

Adriano Rezende adriano.rezende at openbossa.org
Thu Oct 20 18:00:42 CEST 2011


Hi Jan,

Ignore the implementation in the gitorious. I didn't have time yet to
adjust it to the current proposal, which is like the following:

Layout.minimumWidth
Layout.minimumHeight
Layout.maximumWidth
Layout.maximumHeight
Layout.verticalSizePolicy
Layout.horizontalSizePolicy

RowLayout.spacing
RowLayout.stretchFactor

ColumnLayout.spacing
ColumnLayout.stretchFactor

GridLayout.span
GridLayout.row
GridLayout.column
GridLayout.rowSpan
GridLayout.columnSpan

On Thu, Oct 20, 2011 at 9:56 AM,  <jan-arve.saether at nokia.com> wrote:
> * I would rather have an expanding property in favor of stretchFactor. How often do we need to say that item A should expand a bit more than item B? (I don't do that very often). Stretch factors adds also several possible behaviors. (Which one is the best? Which one does the end user expect?) (QBoxLayout and QGraphicsLinearLayout differs in this respect).

Well, the idea is that expanding is handled by vertical/horizontal
size policies, like:

Item {
    Layout.horizontalSizePolicy: Layout.Expanding
}

The stretchFactor is just a bonus and it's not tied to the Item
definition. Basically, it's related to a specific layout. For example:

RowLayout {
    Item {
        RowLayout.stretchFactor: 2 // this is just applied if
horizontalSizePolicy == Expanding
    }
}

Due that fact, I don't see a real drawback of having it. I have some
use cases where I need to use it, like in TableView delegates.

> * I don't like how individual spacing is specified:
>
> RowLayout {
>    spacing: 6
>    Rectangle {
>        color: "green"
>        height: parent.height
>        Layout.spacing: 10
>    }
>    Rectangle {
>        color: "blue"
>        height: parent.height
>    }
> }
>
> If possible, I would prefer:
>
> RowLayout {
>    spacing: 6
>    Rectangle {
>        color: "green"
>        height: parent.height
>    }
>    TransparentItem {   // Ideally this would not even create an item
>        spacing: 10
>    }
>    Rectangle {
>        color: "blue"
>        height: parent.height
>    }
> }

I also like this approach, you can have more complex spacers since you
can use all layout features to define an invisible spacer item, like:

RowLayout {
    Button { }

    // expanding spacer
    Item {
        Layout.minimumWidth: 10
        Layout.horizontalSizePolicy: Layout.Expanding
    }

    // fixed spacer
    Item {
        implicitWidth: 10
    }

    Button { }
}

I can remove the 'spacing' property from RowLayout and ColumnLayout.
It was just a fast way to provide the fixed spacer use case.

> * Finally, I would base my code on a generic grid layout engine (maybe QGridLayoutEngine) instead. The problem with QBoxLayout and QGridLayout is that they don't share implementation, causing a 1x4 gridlayout to behave differently than a 4-item RowLayout in some scenarios. This is an implementation detail though....

Actually, I tested both. I based the code on the qlayoutengine because
it provided a simple and self contained function to handle linear
layouts, which was the first target, but that can be changed. I just
wish to have more spare time to get on the Grid implementation :).


Cheers,
Adriano


More information about the Qt-qml mailing list