QBoxLayout Class

QBoxLayout 类可水平或垂直排列子部件。更多

Header: #include <QBoxLayout>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
继承: QLayout
继承于

QHBoxLayoutQVBoxLayout

公共类型

enum Direction { LeftToRight, RightToLeft, TopToBottom, BottomToTop }

公共函数

QBoxLayout(QBoxLayout::Direction dir, QWidget *parent = nullptr)
virtual ~QBoxLayout()
void addLayout(QLayout *layout, int stretch = 0)
void addSpacerItem(QSpacerItem *spacerItem)
void addSpacing(int size)
void addStretch(int stretch = 0)
void addStrut(int size)
void addWidget(QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment())
QBoxLayout::Direction direction() const
void insertItem(int index, QLayoutItem *item)
void insertLayout(int index, QLayout *layout, int stretch = 0)
void insertSpacerItem(int index, QSpacerItem *spacerItem)
void insertSpacing(int index, int size)
void insertStretch(int index, int stretch = 0)
void insertWidget(int index, QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment())
void setDirection(QBoxLayout::Direction direction)
void setStretch(int index, int stretch)
bool setStretchFactor(QWidget *widget, int stretch)
bool setStretchFactor(QLayout *layout, int stretch)
int stretch(int index) const

重新实现的公共函数

virtual void addItem(QLayoutItem *item) override
virtual int count() const override
virtual Qt::Orientations expandingDirections() const override
virtual bool hasHeightForWidth() const override
virtual int heightForWidth(int w) const override
virtual void invalidate() override
virtual QLayoutItem *itemAt(int index) const override
virtual QSize maximumSize() const override
virtual int minimumHeightForWidth(int w) const override
virtual QSize minimumSize() const override
virtual void setGeometry(const QRect &r) override
virtual void setSpacing(int spacing) override
virtual QSize sizeHint() const override
virtual int spacing() const override
virtual QLayoutItem *takeAt(int index) override

详细说明

QBoxLayout 从其父布局或parentWidget() 中获取空间,将其划分为一排方框,并让每个托管部件填满一个方框。

带五个子部件的水平框布局

如果 QBoxLayout 的方向是Qt::Horizontal ,那么这些方框就会以合适的大小排成一行。每个窗口小部件(或其他方框)将至少获得其最小尺寸,最多获得其最大尺寸。多余的空间将根据拉伸系数共享(下文将详细介绍)。

带五个子部件的垂直盒式布局

如果 QBoxLayout 的方向是Qt::Vertical ,那么方框将被放置在一列中,同样也有合适的大小。

创建 QBoxLayout 的最简单方法是使用其中一个方便类,如QHBoxLayout (用于Qt::Horizontal 框)或QVBoxLayout (用于Qt::Vertical 框)。您也可以直接使用 QBoxLayout 构造函数,将其方向指定为LeftToRight,RightToLeft,TopToBottom, 或BottomToTop

如果 QBoxLayout 不是顶层布局(即它没有管理 widget 的所有区域和子区域),则必须先将其添加到父布局中,然后才能对其进行任何操作。添加布局的常规方法是调用 parentLayout->addLayout() 。

完成添加后,您可以使用以下四个函数之一向 QBoxLayout 添加方框:

  • addWidget()将部件添加到 QBoxLayout 并设置部件的伸展系数。(拉伸因子沿方框行方向)。
  • addSpacing() 用于创建一个空方框;这是用于创建漂亮宽敞的对话框的函数之一。有关设置边距的方法,请参阅下文。
  • addStretch() 用于创建一个可拉伸的空方框。
  • addLayout() 用于在行中添加一个包含另一个QLayout 的方框,并设置该布局的拉伸因子。

使用insertWidget(),insertSpacing(),insertStretch() 或insertLayout() 在布局的指定位置插入方框。

QBoxLayout 还包含两个边距宽度:

  • setContentsMargins() 设置窗口小部件两侧的外边框宽度。这是 QBoxLayout 四条边上预留空间的宽度。
  • setSpacing() 设置相邻方框之间的宽度。(您可以使用addSpacing() 在特定位置获得更多空间)。

默认 margin 由样式提供。大多数 Qt 样式指定的默认边距是:子 Widget 为 9,窗口为 11。间距默认与顶层布局的 margin 宽度相同,或与父布局相同。

要从布局中移除部件,请调用removeWidget() 。在调用QWidget::show() 之前,在部件上调用QWidget::hide() 也会有效地将部件从布局中移除。

您几乎总是希望使用QVBoxLayoutQHBoxLayout ,而不是 QBoxLayout,因为它们的构造函数非常方便。

另请参阅 QGridLayout,QStackedLayout, 以及布局管理

成员类型文档

enum QBoxLayout::Direction

该类型用于确定方框布局的方向。

常数说明
QBoxLayout::LeftToRight0从左到右的水平方向。
QBoxLayout::RightToLeft1从右向左水平
QBoxLayout::TopToBottom2垂直(从上到下)。
QBoxLayout::BottomToTop3从下往上垂直

成员函数文档

[explicit] QBoxLayout::QBoxLayout(QBoxLayout::Direction dir, QWidget *parent = nullptr)

构造一个新的 QBoxLayout,其方向为dir ,父部件为parent

该布局被直接设置为parent 的顶层布局。一个 widget 只能有一个顶级布局。它由QWidget::layout() 返回。

另请参阅 direction() 和QWidget::setLayout()。

[virtual noexcept] QBoxLayout::~QBoxLayout()

销毁此盒式布局。

布局的部件不会被销毁。

[override virtual] void QBoxLayout::addItem(QLayoutItem *item)

重实现:QLayout::addItem(QLayoutItem *item).

void QBoxLayout::addLayout(QLayout *layout, int stretch = 0)

在方框末尾添加layout ,序列拉伸因子为stretch

另请参见 insertLayout()、addItem() 和addWidget()。

void QBoxLayout::addSpacerItem(QSpacerItem *spacerItem)

spacerItem 添加到该方框布局的末尾。

另请参阅 addSpacing() 和addStretch()。

void QBoxLayout::addSpacing(int size)

在该方框布局的末尾添加一个不可伸缩的空格(QSpacerItem ),大小为sizeQBoxLayout 提供默认的边距和间距。此函数将添加额外的空格。

另请参阅 insertSpacing(),addItem() 和QSpacerItem

void QBoxLayout::addStretch(int stretch = 0)

在此方框布局的末尾添加一个可拉伸空间(QSpacerItem ),其最小尺寸为零,拉伸系数为stretch

另请参阅 insertStretch(),addItem() 和QSpacerItem

void QBoxLayout::addStrut(int size)

将方框的垂直尺寸(例如,如果方框为LeftToRight ,则高度)限制为最小值size 。其他约束可能会增加限制。

另请参阅 addItem().

void QBoxLayout::addWidget(QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment())

widget 添加到该方框布局的末尾,拉伸系数为stretch ,对齐方式为alignment

拉伸系数仅适用于direction 中的QBoxLayout ,并且是相对于该QBoxLayout 中的其他框和部件而言的。拉伸系数越高的部件和方框越大。

如果拉伸系数为 0,且QBoxLayout 中其他部件的拉伸系数均大于 0,则空间将根据QWidget:sizePolicy() 中涉及的每个部件来分配。

对齐方式由alignment 指定。默认对齐方式为 0,这意味着 widget 填满了整个单元格。

另请参阅 insertWidget(),addItem(),addLayout(),addStretch(),addSpacing() 和addStrut() 。

[override virtual] int QBoxLayout::count() const

重实现:QLayout::count() const.

QBoxLayout::Direction QBoxLayout::direction() const

返回方框的方向。addWidget() 和addSpacing() 按此方向工作;拉伸按此方向伸展。

另请参阅 setDirection(),QBoxLayout::Direction,addWidget() 和addSpacing() 。

[override virtual] Qt::Orientations QBoxLayout::expandingDirections() const

重实现:QLayout::expandingDirections() const.

[override virtual] bool QBoxLayout::hasHeightForWidth() const

重实现:QLayoutItem::hasHeightForWidth() const.

[override virtual] int QBoxLayout::heightForWidth(int w) const

重实现:QLayoutItem::heightForWidth(int) const.

void QBoxLayout::insertItem(int index, QLayoutItem *item)

index 位置将item 插入该方框布局。索引必须为负数或在 0 至count() 范围内(包括 0)。如果index 为负数或count() 为负数,项目将被添加到末尾。

另请参阅 addItem()、insertWidget()、insertLayout()、insertStretch() 和insertSpacing()。

void QBoxLayout::insertLayout(int index, QLayout *layout, int stretch = 0)

index 位置插入layout ,拉伸因子为stretch 。如果index 为负数,布局将被添加到末尾。

layout 成为方框布局的子节点。

另请参阅 addLayout() 和insertItem()。

void QBoxLayout::insertSpacerItem(int index, QSpacerItem *spacerItem)

index 位置插入spacerItem ,最小尺寸和拉伸系数为零。如果index 为负数,则在末尾添加空格。

另请参阅 addSpacerItem()、insertStretch() 和insertSpacing()。

void QBoxLayout::insertSpacing(int index, int size)

index 位置插入一个不可扩展的空格(一个QSpacerItem ),大小为size 。如果index 为负数,则在末尾添加空格。

方框布局有默认的边距和间距。此函数会添加额外的空格。

另请参阅 addSpacing(),insertItem() 和QSpacerItem

void QBoxLayout::insertStretch(int index, int stretch = 0)

index 位置插入一个可拉伸空格(一个QSpacerItem ),最小尺寸为零,拉伸系数为stretch 。如果index 为负数,则在末尾添加空格。

另请参阅 addStretch(),insertItem() 和QSpacerItem

void QBoxLayout::insertWidget(int index, QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment())

index 位置插入widget ,拉伸因子为stretch ,对齐方式为alignment 。如果index 为负数,则在末尾添加部件。

拉伸系数仅适用于direction 中的QBoxLayout ,并且是相对于该QBoxLayout 中的其他框和部件而言的。拉伸系数越高的部件和方框越大。

如果拉伸系数为 0,且QBoxLayout 中其他部件的拉伸系数均大于 0,则空间将根据QWidget:sizePolicy() 中涉及的每个部件来分配。

对齐方式由alignment 指定。默认对齐方式为 0,这意味着 widget 填满了整个单元格。

另请参阅 addWidget() 和insertItem()。

[override virtual] void QBoxLayout::invalidate()

重新实现:QLayout::invalidate().

重置缓存信息。

[override virtual] QLayoutItem *QBoxLayout::itemAt(int index) const

重实现:QLayout::itemAt(int index) const.

[override virtual] QSize QBoxLayout::maximumSize() const

重实现:QLayout::maximumSize() const.

[override virtual] int QBoxLayout::minimumHeightForWidth(int w) const

重实现:QLayoutItem::minimumHeightForWidth(int w) const.

[override virtual] QSize QBoxLayout::minimumSize() const

重实现:QLayout::minimumSize() const.

void QBoxLayout::setDirection(QBoxLayout::Direction direction)

将此布局的方向设置为direction

另请参阅 direction() 。

[override virtual] void QBoxLayout::setGeometry(const QRect &r)

重实现:QLayout::setGeometry(const QRect &r).

[override virtual] void QBoxLayout::setSpacing(int spacing)

重构属性访问函数:QLayout::spacing

重新实现QLayout::setSpacing().将间距属性设置为spacing

另请参阅 QLayout::setSpacing() 和spacing()。

void QBoxLayout::setStretch(int index, int stretch)

将位置index. 的拉伸因数设置为stretch.

另请参见 stretch().

bool QBoxLayout::setStretchFactor(QWidget *widget, int stretch)

widget 的拉伸因子设置为stretch ,如果在此布局(不包括子布局)中找到widget ,则返回 true;否则返回false

另请参阅 setAlignment() 。

bool QBoxLayout::setStretchFactor(QLayout *layout, int stretch)

这是一个重载函数。

将布局layout 的拉伸因子设置为stretch ,如果在此布局(不包括子布局)中找到layout ,则返回true ;否则返回false

[override virtual] QSize QBoxLayout::sizeHint() const

重实现:QLayoutItem::sizeHint() const.

[override virtual] int QBoxLayout::spacing() const

重构属性访问函数:QLayout::spacing

重新实现QLayout::spacing() 。如果间距属性有效,则返回该值。否则,将计算并返回间距属性的值。由于 widget 中的布局间距与样式有关,如果父级是 widget,则会查询布局(水平或垂直)间距的样式。否则,如果父节点是布局,则查询父节点布局的 spacing()。

另请参阅 QLayout::spacing() 和setSpacing()。

int QBoxLayout::stretch(int index) const

返回位置index 上的拉伸因子。

另请参见 setStretch().

[override virtual] QLayoutItem *QBoxLayout::takeAt(int index)

重实现:QLayout::takeAt(int index)。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.