00. 目录
01. 概述
QBoxLayout类将子窗口控件水平或垂直排列。
QBoxLayout占用它获取的空间(从其父布局或从parentWidget()),将其划分为一行框,并使每个托管窗口小部件填充一个框内。
如果QBoxLayout的方向是Qt :: Horizontal,则将这些框以适当的大小放置在一行中。每个小部件(或其他框)将至少获得其最小尺寸,并且至多获得其最大尺寸。任何多余的空间都会根据拉伸因子进行共享(有关更多信息,请参见下文)。
如果QBoxLayout的方向是Qt :: Vertical,则将这些框放置在一列中,并再次使用适当的大小。
创建QBoxLayout的最简单方法是使用便捷类之一,例如QHBoxLayout(用于Qt :: HorizontalBox)或QVBoxLayout(用于Qt :: VerticalBox)。您还可以直接使用QBoxLayout构造函数,将其方向指定为LeftToRight,RightToLeft,TopToBottom或BottomToTop。
如果QBoxLayout不是顶级布局(即,它不管理小部件的所有区域和子级),则必须先将其添加到其父级布局中,然后才能对其进行任何操作。添加布局的通常方法是调用parentLayout-> addLayout()。
完成此操作后,可以使用以下四个函数之一将框添加到QBoxLayout中:
- addWidget()将小部件添加到QBoxLayout并设置小部件的拉伸因子。(拉伸因子沿着Box的行。)
- addSpacing()创建一个空的Box;这是您用来创建美观且宽敞的对话框的功能之一。有关设置边距的方法,请参见下文。
- addStretch()创建一个空的,可拉伸的框。
- addLayout()将包含另一个QLayout的框添加到该行,并设置该布局的拉伸因子。
使用insertWidget(),insertSpacing(),insertStretch()或insertLayout()在方框中的指定位置插入一个框。
QBoxLayout还包括两个边距宽度:
- setContentsMargins()设置小部件每一侧的外边框的宽度。这是沿着QBoxLayout的四个边中的每个保留空间的宽度。
- setSpacing()设置相邻框之间的宽度。(您可以使用addSpacing()在特定位置获得更多空间。)
样式提供了页边距默认值。大多数Qt样式指定的默认边距对于子窗口小部件为9,对于Windows为11。间距默认与顶层布局的边距宽度相同,或与父布局相同。
要从布局中删除小部件,请调用removeWidget()。在小部件上调用QWidget :: hide()还可以有效地从布局中删除该小部件,直到调用QWidget :: show()为止。
由于它们方便的构造函数,您几乎总是要使用QVBoxLayout和QHBoxLayout而不是QBoxLayout。
02. 公有成员方法
03. 常用成员方法介绍
水平布局器 QHBoxLayout 和垂直布局器 QVBoxLayout 的基类都是 QBoxLayout,只是二者排列方向不同。水平和垂直布局器的主要功能函数都位于基类 QBoxLayout 里面,我们这里专门介绍一下这个基类的功能。
QBoxLayout 构造函数和 setDirection() 都可以指定布局器的方向:
QBoxLayout(Direction dir, QWidget * parent = 0)
void setDirection(Direction direction)
QBoxLayout 布局器的方向 QBoxLayout::Direction 枚举不仅可以指定水平和垂直,还能指定反方向排列:
枚举常量 | 数值 | 描述 |
---|---|---|
QBoxLayout::LeftToRight | 0 | 水平布局,从左到右排列 |
QBoxLayout::RightToLeft | 1 | 水平布局,从右到左排列 |
QBoxLayout::TopToBottom | 2 | 垂直布局,从上到下排列 |
QBoxLayout::BottomToTop | 3 | 垂直布局,从下到上排列 |
水平布局器 QHBoxLayout 和垂直布局器 QVBoxLayout 默认是其中的两种:QBoxLayout::LeftToRight 和 QBoxLayout::TopToBottom 。
布局器是一定要往里面添加控件才有用,添加控件的函数如下:
void addWidget(QWidget * widget, int stretch = 0, Qt::Alignment alignment = 0)
void insertWidget(int index, QWidget * widget, int stretch = 0, Qt::Alignment alignment = 0)
widget 就是要添加的控件指针,stretch 是伸展因子(到 6.5 节再讲这个,本节先不管),伸展因子越大,
窗口变大时拉伸越 多,alignment 一般不需要指定,用默认的即可。第一个 addWidget() 是将控件添加到
布局里面的控件列表末尾,第二个 insertWidget()
是将控件插入到布局里控件列表序号为 index 的位置。
对于布局器里的各个控件,可以设置相邻控件之间默认的间距:
void setSpacing(int spacing)
spacing 就是间隔的像素点数目。如果不设置 spacing,那么布局器会根据默认策略决定如何添加控件之间的间隙,一般是根据父窗口
或父布局器的策略来 定。
布局器中不仅可以添加控件,还可以直接添加其他布局:
void addLayout(QLayout * layout, int stretch = 0)
void insertLayout(int index, QLayout * layout, int stretch = 0)
参数里添加的 layout 布局器会作为一个整体,与父布局器里其他控件一块排布,stretch 也是伸展因子。
对于 QBoxLayout、QHBoxLayout 、QVBoxLayout 布局器,通常不需要手动新建空白条对象,因为它们自带相关函数:
void QBoxLayout::addSpacing(int size) //添加 size 固定尺寸空白条到布局器
void QBoxLayout::addStretch(int stretch = 0) //添加自动拉伸的空白条到布局器
void QBoxLayout::insertSpacing(int index, int size) //插入 size 固定尺寸空白条到布局器
void QBoxLayout::insertStretch(int index, int stretch = 0) //插入自动拉伸的空白条到布局器
对于 add* 添加函数,因为布局器内部通常有多个控件,添加函数是把空白条添加到最后。
而 insert* 插入函数,是把空白条插入到指定序号 index 的位置。
如果要添加自己创建的空白条对象,也是可行的:
void addSpacerItem(QSpacerItem * spacerItem)
void insertSpacerItem(int index, QSpacerItem * spacerItem)
另外,还可以自己从 QLayoutItem 派生新的布局器条目,对布局器条目进行自定义,这些新的布局器条目可以用如下函数添加:
virtual void addItem(QLayoutItem * item)
void insertItem(int index, QLayoutItem * item)
讲了如何添加控件和其他布局器,当然也可以计算布局器里面的条目计数:
virtual int count() const
如果要获得布局器中某个序号的条目:
virtual QLayoutItem * itemAt(int index) const
如果要删除布局器中某个序号的条目:
virtual QLayoutItem * takeAt(int index)
布局器中无论是填充普通控件还是其他布局器,每个条目都是用 QLayoutItem 封装的,对于获得的 QLayoutItem 指针(非空指针),
如果要获取里面封装的控件、布局器或空白条,使用如下函数:
QWidget * QLayoutItem::widget()
QLayout * QLayoutItem::layout()
QSpacerItem * QLayoutItem::spacerItem()
注意判断以上函数的返回值是否为 NULL 指针,如果是非空指针才能进行其他操作。
04. 预留
05. 预留
06. 附录
6.1 Qt教程汇总
网址:https://dengjin.blog.csdn.net/article/details/115174639
暂无评论内容