返回介绍

QGridLayout Class

发布于 2019-10-04 15:00:34 字数 16239 浏览 1027 评论 0 收藏 0

The QGridLayout class lays out widgets in a grid. More...

#include <qlayout.h>

Inherits QLayout.

List of all member functions.

Public Members

  • QGridLayout ( QWidget*parent, intnRows = 1, intnCols = 1, intmargin = 0, intspace = -1, constchar*name = 0 )
  • QGridLayout ( intnRows = 1, intnCols = 1, intspacing = -1, constchar*name = 0 )
  • QGridLayout ( QLayout*parentLayout, intnRows = 1, intnCols = 1, intspacing = -1, constchar*name = 0 )
  • ~QGridLayout ()
  • virtual QSize sizeHint () const
  • virtual QSize minimumSize () const
  • virtual QSize maximumSize () const
  • virtual void setRowStretch ( introw, intstretch )
  • virtual void setColStretch ( intcol, intstretch )
  • int rowStretch ( introw ) const
  • int colStretch ( intcol ) const
  • int numRows () const
  • int numCols () const
  • QRect cellGeometry ( introw, intcol ) const
  • virtual bool hasHeightForWidth () const
  • virtual int heightForWidth ( intw ) const
  • virtual QSizePolicy::ExpandData expanding () const
  • virtual void invalidate ()
  • virtual void addItem ( QLayoutItem*item )
  • void addItem ( QLayoutItem*item, introw, intcol )
  • void addMultiCell ( QLayoutItem*item, intfromRow, inttoRow, intfromCol, inttoCol, intalignment = 0 )
  • void addWidget ( QWidget*w, introw, intcol, intalignment = 0 )
  • void addMultiCellWidget ( QWidget*w, intfromRow, inttoRow, intfromCol, inttoCol, intalignment = 0 )
  • void addLayout ( QLayout*layout, introw, intcol )
  • void addMultiCellLayout ( QLayout*layout, intfromRow, inttoRow, intfromCol, inttoCol, intalignment = 0 )
  • void addRowSpacing ( introw, intminsize )
  • void addColSpacing ( intcol, intminsize )
  • void expand ( intnRows, intnCols )
  • enum Corner { TopLeft, TopRight, BottomLeft, BottomRight }
  • void setOrigin ( Cornerc )
  • Corner origin () const
  • virtual void setGeometry ( constQRect&r )

Protected Members

  • bool findWidget ( QWidget*w, int*row, int*col )
  • void add ( QLayoutItem*item, introw, intcol )

Detailed Description

The QGridLayout class lays out widgets in a grid.

QGridLayout takes the space made available to it (by its parent layout or by the mainWidget()), divides it up into rows and columns, and puts each widget it manages into the correct cell.

Columns and rows behave identically; we will discuss columns, but there are equivalent functions for rows.

Each column has a minimum width and a stretch factor. The minimum width is the greatest of that set using addColSpacing() and the minimum width of each widget in that column. The stretch factor is set using setColStretch() and determines how much of the available space the column will get over and above its necessary minimum.

Normally, each managed widget or layout is put into a cell of its own using addWidget(), addLayout() or by the auto-add facility. It is also possible for a widget to occupy multiple cells using addMultiCellWidget(). If you do this, QGridLayout will guess how to distribute the size over the columns/rows (based on the stretch factors).

To remove a widget from a layout, either delete it or reparent it with QWidget::reparent(). Hiding a widget with QWidget::hide() also effectively removes the widget from the layout, until QWidget::show() is called.

This illustration shows a fragment of a dialog with a five-column, three-row grid (the grid is shown overlaid in magenta):

Columns 0, 2 and 4 in this dialog fragment are made up of a QLabel, a QLineEdit, and a QListBox. Columns 1 and 3 are placeholders made with addColSpacing(). Row 0 consists of three QLabel objects, row 1 of three QLineEdit objects and row 2 of three QListBox objects. We used placeholder columns (1 and 3) to get the right amount of space between the columns.

Note that the columns and rows are not equally wide or tall. If you want two columns to have the same width, you must set their minimum widths and stretch factors to be the same yourself. You do this using addColSpacing() and setColStretch().

If the QGridLayout is not the top-level layout (i.e. does not manage all of the widget's area and children), you must add it to its parent layout when you create it, but before you do anything with it. The normal way to add a layout is by calling parentLayout->addLayout().

Once you have added your layout you can start putting widgets and other layouts into the cells of your grid layout using addWidget(), addLayout() and addMultiCellWidget().

QGridLayout also includes two margin widths: the border and the spacing. The border is the width of the reserved space along each of the QGridLayout's four sides. The spacing is the width of the automatically allocated spacing between neighboring boxes.

Both the border and the spacing are parameters of the constructor and default to 0.

See also QGrid, Layout Overview, Widget Appearance and Style and Layout Management.


Member Type Documentation

QGridLayout::Corner

This enum identifies which corner is the origin (0, 0) of the layout.

  • QGridLayout::TopLeft - the top-left corner
  • QGridLayout::TopRight - the top-right corner
  • QGridLayout::BottomLeft - the bottom-left corner
  • QGridLayout::BottomRight - the bottom-right corner

Member Function Documentation

QGridLayout::QGridLayout ( QWidget*parent, intnRows = 1, intnCols = 1, intmargin = 0, intspace = -1, constchar*name = 0 )

Constructs a new QGridLayout with nRows rows, nCols columns and parent widget, parent. parent may not be 0. The grid layout is called name.

margin is the number of pixels between the edge of the widget and its managed children. space is the default number of pixels between cells. If space is -1, the value of margin is used.

QGridLayout::QGridLayout ( intnRows = 1, intnCols = 1, intspacing = -1, constchar*name = 0 )

Constructs a new grid with nRows rows and nCols columns. If spacing is -1, this QGridLayout inherits its parent's spacing(); otherwise spacing is used. The grid layout is called name.

You must insert this grid into another layout. You can insert widgets and layouts into this layout at any time, but laying out will not be performed before this is inserted into another layout.

QGridLayout::QGridLayout ( QLayout*parentLayout, intnRows = 1, intnCols = 1, intspacing = -1, constchar*name = 0 )

Constructs a new grid that is placed inside parentLayout with nRows rows and nCols columns. If spacing is -1, this QGridLayout inherits its parent's spacing(); otherwise spacing is used. The grid layout is called name.

This grid is placed according to parentLayout's default placement rules.

QGridLayout::~QGridLayout ()

Destroys the grid layout. Geometry management is terminated if this is a top-level grid.

The layout's widgets are not destroyed.

void QGridLayout::add ( QLayoutItem*item, introw, intcol ) [protected]

Adds item at position row, col. The layout takes ownership of the item.

void QGridLayout::addColSpacing ( intcol, intminsize )

Sets the minimum width of column col to minsize pixels.

void QGridLayout::addItem ( QLayoutItem*item, introw, intcol )

Adds item at position row, col. The layout takes ownership of the item.

void QGridLayout::addItem ( QLayoutItem*item ) [virtual]

This is an overloaded member function, provided for convenience. It behaves essentially like the above function.

Adds item to the next free position of this layout.

Reimplemented from QLayout.

void QGridLayout::addLayout ( QLayout*layout, introw, intcol )

Places the layout at position (row, col) in the grid. The top-left position is (0, 0).

Examples: listbox/listbox.cpp, progressbar/progressbar.cpp, t10/main.cpp and t13/gamebrd.cpp.

void QGridLayout::addMultiCell ( QLayoutItem*item, intfromRow, inttoRow, intfromCol, inttoCol, intalignment = 0 )

Adds the item to the cell grid, spanning multiple rows/columns.

The cell will span from fromRow, fromCol to toRow, toCol. Alignment is specified by alignment, which is a bitwise OR of Qt::AlignmentFlags values. The default alignment is 0, which means that the widget fills the entire cell.

void QGridLayout::addMultiCellLayout ( QLayout*layout, intfromRow, inttoRow, intfromCol, inttoCol, intalignment = 0 )

Adds the layout layout to the cell grid, spanning multiple rows/columns. The cell will span from fromRow, fromCol to toRow, toCol.

Alignment is specified by alignment, which is a bitwise OR of Qt::AlignmentFlags values. The default alignment is 0, which means that the widget fills the entire cell.

A non-zero alignment indicates that the layout should not grow to fill the available space but should be sized according to sizeHint().

void QGridLayout::addMultiCellWidget ( QWidget*w, intfromRow, inttoRow, intfromCol, inttoCol, intalignment = 0 )

Adds the widget w to the cell grid, spanning multiple rows/columns. The cell will span from fromRow, fromCol to toRow, toCol.

Alignment is specified by alignment, which is a bitwise OR of Qt::AlignmentFlags values. The default alignment is 0, which means that the widget fills the entire cell.

A non-zero alignment indicates that the widget should not grow to fill the available space but should be sized according to sizeHint().

Examples: cursor/cursor.cpp, layout/layout.cpp and progressbar/progressbar.cpp.

void QGridLayout::addRowSpacing ( introw, intminsize )

Sets the minimum height of row row to minsize pixels.

void QGridLayout::addWidget ( QWidget*w, introw, intcol, intalignment = 0 )

Adds the widget w to the cell grid at row, col. The top-left position is (0, 0) by default.

Alignment is specified by alignment, which is a bitwise OR of Qt::AlignmentFlags values. The default alignment is 0, which means that the widget fills the entire cell.

  • You should not call this if you have enabled the auto-add facility of the layout.

  • From Qt 3.0, the alignment parameter is interpreted more aggressively than in previous versions of Qt. A non-default alignment now indicates that the widget should not grow to fill the available space, but should be sized according to sizeHint().

Examples: addressbook/centralwidget.cpp, layout/layout.cpp, rot13/rot13.cpp, sql/overview/form1/main.cpp, sql/overview/form2/main.cpp, t14/gamebrd.cpp and t8/main.cpp.

QRect QGridLayout::cellGeometry ( introw, intcol ) const

Returns the geometry of the cell with row row and column col in the grid. Returns an invalid rectangle if row or col is outside the grid.

Warning: in the current version of Qt this function does not return valid results until setGeometry() has been called, i.e. after the mainWidget() is visible.

int QGridLayout::colStretch ( intcol ) const

Returns the stretch factor for column col.

See also setColStretch().

void QGridLayout::expand ( intnRows, intnCols )

Expands this grid so that it will have nRows rows and nCols columns. Will not shrink the grid. You should not need to call this function because QGridLayout expands automatically as new items are inserted.

QSizePolicy::ExpandData QGridLayout::expanding () const [virtual]

Returns the expansiveness of this layout.

Reimplemented from QLayout.

bool QGridLayout::findWidget ( QWidget*w, int*row, int*col ) [protected]

Searches for widget w in this layout (not including child layouts). If w is found, it sets *<em>row</em> and *<em>col</em> to the row and column and returns TRUE; otherwise returns FALSE.

Note: if a widget spans multiple rows/columns, the top-left cell is returned.

bool QGridLayout::hasHeightForWidth () const [virtual]

Returns TRUE if this layout's preferred height depends on its width; otherwise returns FALSE.

Reimplemented from QLayoutItem.

int QGridLayout::heightForWidth ( intw ) const [virtual]

Returns the layout's preferred height when it is w pixels wide.

Reimplemented from QLayoutItem.

void QGridLayout::invalidate () [virtual]

Resets cached information.

Reimplemented from QLayout.

QSize QGridLayout::maximumSize () const [virtual]

Returns the maximum size needed by this grid.

Reimplemented from QLayout.

QSize QGridLayout::minimumSize () const [virtual]

Returns the minimum size needed by this grid.

Reimplemented from QLayout.

int QGridLayout::numCols () const

Returns the number of columns in this grid.

int QGridLayout::numRows () const

Returns the number of rows in this grid.

Corner QGridLayout::origin () const

Returns the corner that's used for the grid's origin, i.e. for position (0, 0).

int QGridLayout::rowStretch ( introw ) const

Returns the stretch factor for row row.

See also setRowStretch().

void QGridLayout::setColStretch ( intcol, intstretch ) [virtual]

Sets the stretch factor of column col to stretch. The first column is number 0.

The stretch factor is relative to the other columns in this grid. Columns with a higher stretch factor take more of the available space.

The default stretch factor is 0. If the stretch factor is 0 and no other column in this table can grow at all, the column may still grow.

See also colStretch(), addColSpacing() and setRowStretch().

Examples: layout/layout.cpp, t14/gamebrd.cpp and t8/main.cpp.

void QGridLayout::setGeometry ( constQRect&r ) [virtual]

Resizes managed widgets within the rectangle r.

Reimplemented from QLayout.

void QGridLayout::setOrigin ( Cornerc )

Sets the grid's origin corner, i.e. position (0, 0), to c.

void QGridLayout::setRowStretch ( introw, intstretch ) [virtual]

Sets the stretch factor of row row to stretch. The first row is number 0.

The stretch factor is relative to the other rows in this grid. Rows with a higher stretch factor take more of the available space.

The default stretch factor is 0. If the stretch factor is 0 and no other row in this table can grow at all, the row may still grow.

See also rowStretch(), addRowSpacing() and setColStretch().

Example: addressbook/centralwidget.cpp.

QSize QGridLayout::sizeHint () const [virtual]

Returns the preferred size of this grid.

Reimplemented from QLayoutItem.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文