Ziller Eike schreef op 13-6-2014 09:51: > On Jun 12, 2014, at 6:51 PM, Oswald Buddenhagen > <[email protected]> wrote: > >> On Thu, Jun 12, 2014 at 04:08:17PM +0200, Aurélien Gâteau wrote: >>> Olivier Goffart wrote: >>>> But just wondering if it would not be better to have that as an API within >>>> QGridLayout such as >>>> QGridLayout::setAlignedWith(QGridLayout*) >>> The class works with QFormLayout as well, so I don't think moving the >>> feature into QGridLayout would be a good idea. >>> >> they have a common base class, you know ... >> >> QLayout::linkDimension(QLayout *other, Qt::Orientation orientation = >> Qt::Horizontal) >> >> (the second parameter is actually a flag field). >> >> and for more fine-grained control one could consider (not sure this makes >> sense): >> >> QLayoutItem::linkDimension(QLayoutItem *other, Qt::Orientation orientation >> = Qt::Horizontal) >> >> but then, i wonder whether you are fixing the right problem to start >> with. usually, one would create a big master layout, and embed >> sublayouts spanning multiple cells in the areas that are not supposed to >> be contrained by the grid. > In principle I like the idea of being able to work with a “master” grid. > That’s something I wished e.g. for Qt Creator’s preferences dialog, where we > use group boxes to group options, and these contain either something like > what form layout does, or lists of checkboxes etc, or a mix. > Currently it is basically impossible to align the content in the vertically > layouted group boxes. > Indeed, and that's exactly what ColumnResizer addresses. Putting everything in one big layout works only for small, simple widgets. As soon as you start using widgets that contain other widgets (like group boxes, but also tab pages or just compound widgets) you're out of luck with what we currently have in Qt. I have used ColumnResizer successfully to work around these limitations in the past.
Ideally (to me), it would be possible to indeed have a single master grid for a window (or a subsection thereof), and be able to somehow 'attach' other layouts inside containers widgets to this master grid, so the local layout would mirror (a part of) the master grid, and the master grid would be sized such that it takes into account these attached child grids. So, more something like this: //modeled after addWidget QGridLayout::linkToParentLayout(QGridLayout *masterGrid, int fromRow, int fromColumn, int rowSpan, intColumnSpan); Other layout types would get similar methods: //a hbox is a single row by definition QHBoxLayout::linkToParentLayout(QGridLayout *masterGrid, int row, int fromColumn, int columnSpan); //a vbox is a single column by definition QVBoxLayout::linkToParentLayout(QGridLayout *masterGrid, int fromRow, int column, int rowSpan); //a form layout is just a two-column layout QFormLayout::linkToParentLayout(QGridLayout *masterGrid, int fromRow, int fromColumn, int rowSpan); //columnSpan == 2 by definition A downside to such an approach is of course that it takes more effort to think about the layout of the form, as you need to take all its containers into account as well. The margins of the container itself has will need additional rows and columns in such a master grid then. Also, adding items in one container may then influence the layout in another container. That could get quite complicated to work with. ColumnResizer is simpler in that sense. André _______________________________________________ Development mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/development
