文章目录
QBoxLayout 类
QBoxLayout类将子窗口小部件水平或垂直排列。
Header: | #include < QBoxLayout > |
---|---|
qmake: | QT += widgets |
Inherits: | QLayout |
Inherited By: | QHBoxLayout ,QVBoxLayout |
详细说明
QBoxLayout获取空间(从其父布局或parentWidget() ),将其划分为一行框,并使每个托管小部件填充一个框。
如果QBoxLayout的方向是Qt::Horizontal,则框将以适当的大小放置在一行中。每个小部件(或其他框)将至少获得其最小大小,最多获得其最大大小。任何多余的空间都将根据拉伸系数进行共享(下面将详细介绍)。
如果QBoxLayout的方向是Qt::Vertical,那么这些框将放置在一列中,同样具有合适的大小。
创建QBoxLayout最简单的方法是使用其中一个便利类,例如QHBoxLayout(对于Qt::Horizontal Box)或QVBoxLayout(对于Qt::Vertical Box)。也可以直接使用QBoxLayout构造函数,将其方向指定为LeftToRight、RightToLeft、TopToBottom或BottomToTop。
如果QBoxLayout不是顶级布局(即,它没有管理小部件的所有区域和子级),则必须将其添加到其父布局中,然后才能对其执行任何操作。添加布局的常规方法是调用parentLayout->addLayout() 。
完成此操作后,可以使用以下四个函数之一将方框添加到QBoxLayout:
- addWidget() 将小部件添加到QBoxLayout并设置小部件的拉伸因子。(拉伸因子沿框行。)
- addSpacing() 创建一个空框;这是用于创建漂亮而宽敞的对话框的函数之一。有关设置边距的方法,请参见下文。
- addStretch() 创建一个空的可拉伸框。
- addLayout() 将包含另一个QLayout的框添加到行中,并设置该布局的拉伸系数。
使用insertWidget() 、insertSpacing() 、insertStretch() 或insertLayout() 在布局中的指定位置插入框。
QBoxLayout还包括两种边距宽度:
- setContentsMargins() 设置小部件每侧的外边框宽度。这是QBoxLayout四条边上保留空间的宽度。
- setSpacing() 设置相邻框之间的宽度。(可以使用addSpacing() 在特定位置获得更多空间。)
默认边距由样式提供。大多数Qt样式指定的默认边距对于子窗口小部件是9,对于windows是11。间距默认与顶层布局的边距宽度相同,或与父布局相同。
要从布局中删除小部件,请调用removeWidget() 。在小部件上调用QWidget::hide() 也可以有效地将小部件从布局中移除,直到调用QWidget::show() 为止。
由于它们方便的构造函数,您几乎总是要使用QVBoxLayout和QHBoxLayout而不是QBoxLayout。
公共类型
enum Direction
此类型用于确定长方体布局的方向。
Constant | Value | Description |
---|---|---|
QBoxLayout::LeftToRight | 0 | 从左到右水平。 |
QBoxLayout::RightToLeft | 1 | 从右到左水平。 |
QBoxLayout::TopToBottom | 2 | 从上到下垂直。 |
QBoxLayout::BottomToTop | 3 | 从下到上垂直。 |
公共函数
构造和析构
- QBoxLayout(QBoxLayout::Direction dir, QWidget *parent = nullptr)
- virtual ~QBoxLayout()
增加内容
- void addLayout(QLayout *layout, int stretch = 0)
- void insertLayout(int index, QLayout *layout, int stretch = 0)
- void addSpacerItem(QSpacerItem *spacerItem)
- void insertSpacerItem(int index, QSpacerItem *spacerItem)
不可伸展的空间
- int spacing() const
- void setSpacing(int spacing)
- void addSpacing(int size)
- void insertSpacing(int index, int size)
可伸展的空间
- int stretch(int index) const
- void setStretch(int index, int stretch)
- void addStretch(int stretch = 0)
- void insertStretch(int index, int stretch = 0)
最小尺寸的支柱
- void addStrut(int size)
增加小部件
- void addWidget(QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment())
- void insertWidget(int index, QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment())
插入项目 QLayoutItem
- void insertItem(int index, QLayoutItem *item)
方向
- QBoxLayout::Direction direction() const
- void setDirection(QBoxLayout::Direction direction)
拉伸因子
- bool setStretchFactor(QWidget *widget, int stretch)
- bool setStretchFactor(QLayout *layout, int stretch)
重写的公共函数
增删查
- virtual void addItem(QLayoutItem *item) override
- virtual QLayoutItem * takeAt(int index) override
- virtual QLayoutItem * itemAt(int index) const override
- virtual int count() const override
特殊
- virtual void invalidate() override 使此布局项中的任何缓存信息无效。
尺寸相关
-
virtual Qt::Orientations expandingDirections() const override
-
virtual bool hasHeightForWidth() const override
-
virtual int heightForWidth(int w) 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 QSize sizeHint() const override
总结
子类QVBoxLayout和QHBoxLayout 构造函数更加方便,所以基本不直接使用QBoxLayout。