布局管理器是qt提供的一种自动完成窗体布局的工具,减少我们的工作量并且很美观!
基本的布局管理器有四种:Horizontal, Vertical, Grid, 和Form 布局管理器。这些在前面的例子都能看到是如何使用的。Qt的帮助文档里也有一个专门讲他们的例子:Basic Layouts。 QHBoxLayout, QVBoxLayout, QGridLayout,和QFormLayout 都继承自QLayout。Layouts通过调用addWidget或者addRow将窗口部件加入进去,QWidget及其子类都有一个setLayout的成员函数,可以将我们的布局管理器设置进去,这样就完成了布局。
经常要用到的三个布局部件 QHBoxLayout水平布局 QVBoxLayout垂直布局 QGridLayout表格布局
QHBoxLayout和QVBoxLayout用法 基本相同:
vlayout->addWidget(w1); vlayout->addWidget(w2); ……
QGridLayout用法
layout->addWidget(widget,row,column,rowSpan,columnSpan);
layout->addLayout(layout,row,column,rowSpan,columnSpan);
(row,column):控件占据左上角的单元格位置 rowSpan:控件占据的行数
columnSpan:控件占据的列数(不写默认为1) 控件随窗体伸缩 将布局与主窗体建立联系 layout=new QHBoxLayout(this);
或者this->setLayout(layout);
layout->addStretch();
可伸缩的空间
layout->setAlignment(Qt::AlignHCenter);//布局内控件水平居中
layout->setSpacing(10);//控件间隔为10
layout->setMargin(10);//页边距为10
Qt设计器中spacer控件 以上在对控件位置调整时常用
结合SizePolicy属性控制布局管理中的控件的尺寸自适应方式 也就是控件随主窗体伸缩方式(可自行增大或缩小)
QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);//可自行增大和收缩
Fixed:不能放大或缩小
Minimum:不能小于sizeHint尺寸,可放大(若设置了最大尺寸)
Maximum:不能放大,可缩小到允许的最小尺寸(若setMinimumSize(10,10)只能缩小到(10,10))
Preferred:控件的sizeHint是他的Hint,可以放大或缩小
比例因子的使用
例:布局中有左右两控件,右边比左边水平伸缩2倍 sizePolicy.setHorizontalStretch(1); sizePolicy.setVerticalStretch(0); left->setSizePolicy(sizePolicy);
sizePolicy.setHorizontalStretch(2); sizePolicy.setVerticalStretch(0); left->setSizePolicy(sizePolicy);
水平伸展比例(1,2) 垂直伸展比例(0,0)
布局顾名思义是对控件的位置的整体规划,每个控件之间都存在着位置关系,所以改变控件(移动、关闭)会破坏布局
结论:两种方法结合使用,应该可以应对大部分界面布局