古城网站建设国际网站空间
目录
一、QVBoxLayout-垂直布局:
1.1QVBoxLayout介绍:
1.2 属性介绍:
1.3细节理解:
二、QHBoxLayout-水平布局:
三、QGridLayout-网格布局:
3.1QGridLayout介绍:
3.2常用方法:
四、拉伸系数,控制控件显示的大小:
4.1拉伸系数介绍:
4.2水平拉伸-控件的宽度:
4.3控件的大小策略:
4.4垂直拉伸-控件的高度:
一、QVBoxLayout-垂直布局:
1.1QVBoxLayout介绍:
- QVBoxLayout 是Qt中的一个布局管理器。
 - 用于将子控件垂直排列。它会自动调整子控件的大小和位置,使它们在垂直方向上依次排列,占据可用的空间。
 - 将控件添加到布局管理器:layout->addWidget(控件名);
 - 将布局管理器挂到对象树:this->setLayout(layout_1);
 - 将布局管理器添加到布局管理器:layout_1->addLayout(layout_2);
 
1.2 属性介绍:
layoutLeftMargin 
- 设置布局左侧的边距。
 - 获取当前左边距:layout->contentsMargins().left()
 layoutTopMargin 
- 设置布局顶部的边距。
 - 获取当前顶部边距:layout->contentsMargins().top()
 layoutRightMargin 
- 设置布局右侧的边距。
 - 获取当前右边距:layout->contentsMargins().right()
 layoutBottomMargin 
- 设置布局底部的边距。
 - 获取当前底部边距:layout->contentsMargins().bottom()
 layoutSpacing 
- 设置子控件之间的间距。
 - 获取当前间距:layout->spacing()
 - 设置间距:layout->setSpacing(spacing)
 layoutStretch 
- 设置子控件的伸缩因子。
 - 设置伸缩因子:layout->setStretch(index, stretch)
 - 获取当前伸缩因子:layout->stretch(index)
 layoutSizeConstraint 
- 设置布局的尺寸约束。
 - 获取当前尺寸约束:layout->sizeConstraint()
 - 设置尺寸约束:layout->setSizeConstraint(constraint)
 
1.3细节理解:
- 一个Widget只能创建一个布局管理器。
 - 通过代码创建的布局管理器,调整窗口的大小,里面的控件也会随之拉伸。
 - 通过ui界面可以创建多个布局管理器,但是创建多余一个的布局管理器前,会先创建一个Widget,此时拉申程序的窗口,控件不会随着伸缩。
 
二、QHBoxLayout-水平布局:
- QHBoxLayout 是Qt中的一个布局管理器。
 - 用于将子控件水平排列。它会自动调整子控件的大小和位置,使它们在水平方向上依次排列,占据可用的空间。
 - 属性和垂直布局相同。
 
三、QGridLayout-网格布局:
3.1QGridLayout介绍:
- QGridLayout 是 Qt 中的一种布局管理器,用于在网格中排列子控件。它允许在特定的行和列中添加控件或其他布局。
 
3.2常用方法:
void addLayout(QLayout *layout, int row, int column) 
- 将子布局添加到特定位置
 - layout:要添加的子布局。
 - row:子布局所在的行。
 - column:子布局所在的列。
 void addLayout(QLayout *layout, int row, int column, int rowSpan, int columnSpan) 
- 将子布局添加到特定位置,并指定行跨度和列跨度
 - layout:要添加的子布局。
 - row:子布局起始行。
 - column:子布局起始列。
 - rowSpan:子布局占用的行数。
 - columnSpan:子布局占用的列数。
 
四、拉伸系数,控制控件显示的大小:
4.1拉伸系数介绍:
- 通过代码创建的控件,将它添加到布局管理器后,他们的大小是均等的。
 - 如果要创建出大小不同的控件,就需要通过拉伸系数设置控件。
 - 拉伸系数就相当于设置控件之间的比例。
 
4.2水平拉伸-控件的宽度:
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//创建6个按钮QPushButton* b1=new QPushButton("1");QPushButton* b2=new QPushButton("2");QPushButton* b3=new QPushButton("3");QPushButton* b4=new QPushButton("4");QPushButton* b5=new QPushButton("5");QPushButton* b6=new QPushButton("6");//创建一个网格布局控制器,并将6个按钮分为两行,每行三个QGridLayout* layout=new QGridLayout();layout->addWidget(b1,0,0);layout->addWidget(b2,0,1);layout->addWidget(b3,0,2);layout->addWidget(b4,1,0);layout->addWidget(b5,1,1);layout->addWidget(b6,1,2);//设置拉伸系数this->setLayout(layout);layout->setColumnStretch(0,1);layout->setColumnStretch(1,3);layout->setColumnStretch(2,5);}
- 如果将拉伸系数设为0,那么对应列的控件的水平宽度是一个固定值,不再参与比例拉伸。
 - 设置水平拉伸因子:layout->setColumnStretch(column,stretch);
 
4.3控件的大小策略:
- 在 Qt 中,控件的大小策略(QSizePolicy)定义了控件在布局管理器中的行为方式,包括如何在水平和垂直方向上拉伸和收缩。默认情况下,控件的 QSizePolicy 会影响它们在布局中的拉伸和缩放行为。
 - 每个控件在创建时都有一个默认的 QSizePolicy。QSizePolicy 包含两个主要属性:水平策略和垂直策略。
 - 不同控件可能有不同的默认策略。
 
- QSizePolicy 主要有以下几种常见的策略:
 - QSizePolicy::Fixed:控件的大小是固定的,不会改变。
 - QSizePolicy::Minimum:控件可以收缩到比推荐的大小更小,但不会拉伸。
 - QSizePolicy::Maximum:控件可以拉伸到比推荐的大小更大,但不会收缩。
 - QSizePolicy::Preferred:控件会根据其推荐的大小进行调整,但可以在必要时拉伸或收
 - 缩。
 - QSizePolicy::Expanding:控件会尽可能地拉伸以填充可用空间。
 - QSizePolicy::Ignored:控件的大小不受其内容或推荐大小的影响,可以任意调整。
 
4.4垂直拉伸-控件的高度:
- label的水平拉伸默认策略为QSizePolicy::Expanding,但是他的垂直拉伸的默认策略是QSizePolicy::Fixed。
 - 如果想要和水平拉伸一样自由拉伸,就要手动设置label的拉伸策略为QSizePolicy::Expanding。
 - 下面通过两个图片对比设置拉伸策略后的差异:
 
- 当垂直方向可以自由拉伸之后。就可以设置比例拉伸了。
 - 设置垂直拉伸因子:layout->setRowStretch(column,stretch);
 



