头: | #include <QLayout> |
qmake: | QT += widgets |
继承: | QObject and QLayoutItem |
继承者: |
enum | SizeConstraint { SetDefaultConstraint, SetFixedSize, SetMinimumSize, SetMaximumSize, SetMinAndMaxSize, SetNoConstraint } |
QLayout (QWidget * parent ) | |
QLayout () | |
bool | activate () |
virtual void | addItem (QLayoutItem * item ) = 0 |
void | addWidget (QWidget * w ) |
QMargins | contentsMargins () const |
QRect | contentsRect () const |
virtual int | count () const = 0 |
void | getContentsMargins (int * left , int * top , int * right , int * bottom ) const |
virtual int | indexOf (QWidget * widget ) const |
bool | isEnabled () const |
virtual QLayoutItem * | itemAt (int index ) const = 0 |
QWidget * | menuBar () const |
QWidget * | parentWidget () const |
void | removeItem (QLayoutItem * item ) |
void | removeWidget (QWidget * widget ) |
QLayoutItem * | replaceWidget (QWidget * from , QWidget * to , Qt::FindChildOptions options = Qt::FindChildrenRecursively) |
bool | setAlignment (QWidget * w , Qt::Alignment alignment ) |
bool | setAlignment (QLayout * l , Qt::Alignment alignment ) |
void | setContentsMargins (int left , int top , int right , int bottom ) |
void | setContentsMargins (const QMargins & margins ) |
void | setEnabled (bool enable ) |
void | setMenuBar (QWidget * widget ) |
void | setSizeConstraint ( SizeConstraint ) |
void | setSpacing ( int ) |
SizeConstraint | sizeConstraint () const |
int | spacing () const |
virtual QLayoutItem * | takeAt (int index ) = 0 |
void | update () |
virtual QSizePolicy::ControlTypes | controlTypes () const |
virtual Qt::Orientations | expandingDirections () const |
virtual QRect | geometry () const |
virtual void | invalidate () |
virtual bool | isEmpty () const |
virtual QLayout * | layout () |
virtual QSize | maximumSize () const |
virtual QSize | minimumSize () const |
virtual void | setGeometry (const QRect & r ) |
QSize | closestAcceptableSize (const QWidget * widget , const QSize & size ) |
void | addChildLayout (QLayout * l ) |
void | addChildWidget (QWidget * w ) |
QRect | alignmentRect (const QRect & r ) const |
virtual void | childEvent (QChildEvent * e ) |
QLayout 类是几何体管理器的基类。
此抽象基类继承通过具体类 QBoxLayout , QGridLayout , QFormLayout ,和 QStackedLayout .
For users of QLayout subclasses or of QMainWindow there is seldom any need to use the basic functions provided by QLayout ,譬如 setSizeConstraint () 或 setMenuBar ()。见 布局管理 了解更多信息。
要制作自己的布局管理器,实现函数 addItem (), sizeHint (), setGeometry (), itemAt () 和 takeAt ()。还应实现 minimumSize () 以确保布局不会重置大小为 0 (若空间太小)。要支持高度从属其宽度的子级,实现 hasHeightForWidth () 和 heightForWidth ()。见 边框布局 and 流式布局 范例了解实现自定义布局管理器的更多有关信息。
几何体管理停止,当布局管理器被删除时。
另请参阅 QLayoutItem , 布局管理 , 基本布局范例 , 边框布局范例 ,和 流式布局范例 .
可能的值包括:
常量 | 值 | 描述 |
---|---|---|
QLayout::SetDefaultConstraint
|
0
|
将主 Widget 的最小大小设为 minimumSize (),除非小部件已经拥有最小大小。 |
QLayout::SetFixedSize
|
3
|
将主 Widget 的大小设为 sizeHint ();它根本无法重置大小。 |
QLayout::SetMinimumSize
|
2
|
将主 Widget 的最小大小设为 minimumSize ();它无法更小。 |
QLayout::SetMaximumSize
|
4
|
将主 Widget 的最大大小设为 maximumSize ();它无法更大。 |
QLayout::SetMinAndMaxSize
|
5
|
将主 Widget 的最小大小设为 minimumSize () 并将其最大大小设为 maximumSize (). |
QLayout::SetNoConstraint
|
1
|
Widget 不受约束。 |
另请参阅 setSizeConstraint ().
此特性保持布局的重置尺寸模式
默认模式为 SetDefaultConstraint .
访问函数:
SizeConstraint | sizeConstraint () const |
void | setSizeConstraint ( SizeConstraint ) |
此特性保持布局内 Widget 之间的间距
若值未明确设置,布局间距从父级布局或父级 Widget 样式设置继承。
For QGridLayout and QFormLayout ,它是可能的设置不同水平和垂直间距使用 setHorizontalSpacing() and setVerticalSpacing() 。在此情况下,spacing() 返回 -1。
访问函数:
int | spacing () const |
void | setSpacing ( int ) |
另请参阅 contentsRect (), getContentsMargins (), QStyle::layoutSpacing (),和 QStyle::pixelMetric ().
构造新的顶层 QLayout ,采用父级 parent . parent may not be 0.
There can be only one top-level layout for a widget. It is returned by QWidget::layout ().
构造新的子级 QLayout .
This layout has to be inserted into another layout before geometry management will work.
重做布局为 parentWidget () 若有必要。
一般应该不需要调用此,因为在最合适的时候会自动调用它。返回 true 若布局有重做。
另请参阅 update () 和 QWidget::updateGeometry ().
[protected]
void
QLayout::
addChildLayout
(
QLayout
*
l
)
此函数被调用从
addLayout()
or
insertLayout()
函数在子类中添加布局
l
作为子布局。
需要直接调用它的唯一情景,是实现支持嵌套布局的自定义布局。
另请参阅 QBoxLayout::addLayout (), QBoxLayout::insertLayout (),和 QGridLayout::addLayout ().
[protected]
void
QLayout::
addChildWidget
(
QWidget
*
w
)
此函数被调用从
addWidget()
函数在子类中添加
w
作为布局的管理 Widget。
若 w is already managed by a layout, this function will give a warning and remove w from that layout. This function must therefore be called before adding w to the layout's data structure.
[pure virtual]
void
QLayout::
addItem
(
QLayoutItem
*
item
)
在子类中实现以添加 item 。如何添加它特定于每个子类。
This function is not usually called in application code. To add a widget to a layout, use the addWidget () function; to add a child layout, use the addLayout() function provided by the relevant QLayout 子类。
注意: 所有权对于 item is transferred to the layout, and it's the layout's responsibility to delete it.
另请参阅 addWidget (), QBoxLayout::addLayout (),和 QGridLayout::addLayout ().
添加 Widget w 到此布局以特定布局方式。此函数使用 addItem ().
[protected]
QRect
QLayout::
alignmentRect
(const
QRect
&
r
) const
Returns the rectangle that should be covered when the geometry of this layout is set to r , provided that this layout supports setAlignment ().
结果派生自 sizeHint () and expanding(). It is never larger than r .
[virtual protected]
void
QLayout::
childEvent
(
QChildEvent
*
e
)
重实现自 QObject::childEvent ().
[static]
QSize
QLayout::
closestAcceptableSize
(const
QWidget
*
widget
, const
QSize
&
size
)
返回大小满足所有大小约束在 widget ,包括 heightForWidth () and that is as close as possible to size .
返回围绕布局所使用的边距。
默认情况下, QLayout 使用由样式提供的值。在大多数平台,所有方向边距为 11 像素。
该函数在 Qt 4.6 引入。
另请参阅 setContentsMargins ().
返回布局的 geometry () 矩形,但要考虑内容边距。
该函数在 Qt 4.3 引入。
另请参阅 setContentsMargins () 和 getContentsMargins ().
[virtual]
QSizePolicy::ControlTypes
QLayout::
controlTypes
() const
重实现自 QLayoutItem::controlTypes ().
[pure virtual]
int
QLayout::
count
() const
必须在子类中实现以返回布局项数。
另请参阅 itemAt ().
[virtual]
Qt::Orientations
QLayout::
expandingDirections
() const
重实现自 QLayoutItem::expandingDirections ().
Returns whether this layout can make use of more space than sizeHint (). A value of Qt::Vertical or Qt::Horizontal means that it wants to grow in only one dimension, whereas Qt::Vertical | Qt::Horizontal means that it wants to grow in both dimensions.
默认实现返回 Qt::Horizontal | Qt::Vertical . Subclasses reimplement it to return a meaningful value based on their child widgets's size policies .
另请参阅 sizeHint ().
[virtual]
QRect
QLayout::
geometry
() const
重实现自 QLayoutItem::geometry ().
另请参阅 setGeometry ().
Extracts the left, top, right, and bottom margins used around the layout, and assigns them to * left , * top , * right , and * bottom (unless they are null pointers).
默认情况下, QLayout 使用由样式提供的值。在大多数平台,所有方向边距为 11 像素。
该函数在 Qt 4.3 引入。
另请参阅 setContentsMargins (), QStyle::pixelMetric (), PM_LayoutLeftMargin , PM_LayoutTopMargin , PM_LayoutRightMargin ,和 PM_LayoutBottomMargin .
[virtual]
int
QLayout::
indexOf
(
QWidget
*
widget
) const
搜索小部件 widget 在此布局 (不包括子级布局)。
返回索引对于 widget ,或 -1 若 widget 找不到。
默认实现遍历所有项,使用 itemAt ()
[virtual]
void
QLayout::
invalidate
()
重实现自 QLayoutItem::invalidate ().
[virtual]
bool
QLayout::
isEmpty
() const
重实现自 QLayoutItem::isEmpty ().
返回
true
若布局被启用;否则返回
false
.
另请参阅 setEnabled ().
[pure virtual]
QLayoutItem
*QLayout::
itemAt
(
int
index
) const
必须在子类中实现以返回布局项在 index . If there is no such item, the function must return 0. Items are numbered consecutively from 0. If an item is deleted, other items will be renumbered.
此函数可用于迭代布局。以下代码将为 Widget 布局结构中的每个布局项绘制矩形。
static void paintLayout(QPainter *painter, QLayoutItem *item) { QLayout *layout = item->layout(); if (layout) { for (int i = 0; i < layout->count(); ++i) paintLayout(painter, layout->itemAt(i)); } painter->drawRect(item->geometry()); } void MyWidget::paintEvent(QPaintEvent *) { QPainter painter(this); if (layout()) paintLayout(&painter, layout()); }
[virtual]
QLayout
*QLayout::
layout
()
重实现自 QLayoutItem::layout ().
[virtual]
QSize
QLayout::
maximumSize
() const
重实现自 QLayoutItem::maximumSize ().
Returns the maximum size of this layout. This is the largest size that the layout can have while still respecting the specifications.
The returned value doesn't include the space required by QWidget::setContentsMargins () 或 menuBar ().
默认实现允许不受限制重置大小。
Returns the menu bar set for this layout, or 0 if no menu bar is set.
另请参阅 setMenuBar ().
[virtual]
QSize
QLayout::
minimumSize
() const
重实现自 QLayoutItem::minimumSize ().
Returns the minimum size of this layout. This is the smallest size that the layout can have while still respecting the specifications.
The returned value doesn't include the space required by QWidget::setContentsMargins () 或 menuBar ().
默认实现允许不受限制重置大小。
Returns the parent widget of this layout, or 0 if this layout is not installed on any widget.
若布局是子布局,此函数返回父级布局的父级 Widget。
另请参阅 parent ().
移除布局项 item 从布局。删除项是调用者的责任。
预告 item 可以是布局 (由于 QLayout 继承 QLayoutItem ).
另请参阅 removeWidget () 和 addItem ().
移除小部件 widget 从布局。在调用此之后,调用者负责为 Widget 赋予合理几何体,或将 Widget 放回布局,或明确隐藏它若有必要。
注意: 所有权对于 widget 仍然与添加时相同。
另请参阅 removeItem (), QWidget::setGeometry (),和 addWidget ().
搜索小部件
from
并将它替换为小部件
to
若找到。返回布局项包含小部件
from
当成功时。否则
0
被返回。若
options
包含
Qt::FindChildrenRecursively
(默认),搜索子布局为履行替换。任何其它标志在
options
被忽略。
注意,返回项因此可能不属于此布局,而是属于子布局。
返回的布局项不再由布局所拥有,且应该被删除或插入另一布局。小部件 from 不再由布局进行管理,且可能需要删除或隐藏。父级对于小部件 from 保持不变。
此函数适于内置 Qt 布局,但可能不适于自定义布局。
该函数在 Qt 5.2 引入。
另请参阅 indexOf ().
设置对齐方式为小部件
w
to
alignment
和返回 true 若
w
在此布局中被找到 (不包括子级布局);否则返回
false
.
这是重载函数。
设置对齐方式为布局
l
to
alignment
并返回
true
if
l
在此布局中被找到 (不包括子级布局);否则返回
false
.
设置 left , top , right ,和 bottom 边距以用于布局周围。
默认情况下, QLayout 使用由样式提供的值。在大多数平台,所有方向边距为 11 像素。
该函数在 Qt 4.3 引入。
另请参阅 contentsMargins (), getContentsMargins (), QStyle::pixelMetric (), PM_LayoutLeftMargin , PM_LayoutTopMargin , PM_LayoutRightMargin ,和 PM_LayoutBottomMargin .
设置 margins 以围绕布局使用。
默认情况下, QLayout 使用由样式提供的值。在大多数平台,所有方向边距为 11 像素。
该函数在 Qt 4.6 引入。
另请参阅 contentsMargins ().
启用此布局,若 enable 为 true,否则禁用它。
启用的布局会根据变化动态调节;禁用的布局就好像它不存在一样。
默认情况下,所有布局是启用的。
另请参阅 isEnabled ().
[virtual]
void
QLayout::
setGeometry
(const
QRect
&
r
)
重实现自 QLayoutItem::setGeometry ().
另请参阅 geometry ().
告诉几何体管理器放置菜单栏 widget 在顶部对于 parentWidget (),超出 QWidget::contentsMargins ()。所有子级 Widget 均放置在菜单栏底边缘下方。
另请参阅 menuBar ().
[pure virtual]
QLayoutItem
*QLayout::
takeAt
(
int
index
)
必须在子类中实现以移除布局项,在 index 从布局,并返回项。若没有这种项,函数必须什么都不做,并返回 0。项从 0 起被连续编号。若项被移除,其它项将被重新编号。
下列代码片段展示从布局,安全移除所有项的办法:
QLayoutItem *child; while ((child = layout->takeAt(0)) != 0) { ... delete child; }
更新布局为 parentWidget ().
通常,不需要调用此,因为它会被自动调用 (在最合适时间)。
另请参阅 activate () 和 invalidate ().