一、布局管理系统
若部件上设置了布局管理器,那么它会完成以下几种任务:
定位子部件;
感知窗口默认大小;
感知窗口最小大小;
改变大小处理;
当内容改变时自动更新:
字体大小,文本或子部件的其他内容随之改变;
隐藏或显示子部件;
移除一个子部件。
1.QBoxLayout(基本布局管理器)
可以使子部件在水平方向或者垂直方向排成一列,它将所有的空间分成一行盒子,然后将每个部件放入一个盒子中。
它有两个子类QHBoxLayout水平布局管理器和QVBoxLayout垂直布局管理器。
布局管理器的几个属性:
属性 说明
layoutName 现在所使用的布局管理器的名称
layoutLeftMargin 设置布局管理器到界面左边界的距离
layoutTopMargin 设置布局管理器到界面上边界的距离
layoutRightMargin 设置布局管理器到界面右边界的距离
layoutBottomMargin 设置布局管理器到界面下边界的距离
layoutSpacing 布局管理器中各个子部件间的距离
layoutStretch 伸缩因子
layoutSizeConstraint 设置大小约束条件
2.QGridLayout(栅格布局管理器)
使部件在网格中进行布局,它将所有的空间分隔成一些行和列,行和列的交叉处就形成了单元格,然后将部件放入一个确定的单元格中。
3.QFormLayout(窗体布局管理器)
用来管理表单的输入部件和与它们相关的标签。窗体布局管理器将它的子部件分为两列,左边是一些标签,右边是一些输入部件。
4.QStackedLayout(栈布局管理器)
将一个子布局管理器放入主布局。
5.设置部件大小:
只要是继承自QWidget的类都有以下两个属性:
大小提示:siziHint() 保存部件的建议大小信息 ->通过函数可获取
最小大小提示:minimumSizeHint() 保存部件的建议最小大小信息 ->通过函数可获取
6.大小策略(sizePolicy)属性
常量 描述
QSizePolicy::Fixed 只能使用sizeHint()提供的值,无法伸缩
QSizePolicy::Minimum siziHint()提供的大小是最小的,部件可以被拉伸
QSizePolicy::Maximum sizeHint()提供的是最大大小,部件可以被压缩
QSizePolicy::Preferred sizeHint()提供的大小是最佳大小,可以拉伸可以压缩
QSizePolicy::Expanding sizeHint()提供的是合适的大小,部件可以被压缩,不过更倾向于拉伸来获得更多的空间
QSizePolicy::MinimumExpanding sizeHint()提供的大小是最小的,部件倾向于被拉伸来获取更多的空间
QSizePolicy::Ignored sizeHint()的值被忽略,部件将尽可能的被拉伸来获取更多的空间
7.伸缩因子
用来设置部件间的比例。
在代码中,可以在使用布局管理器的addWidget()函数添加部件的同时,在第二个参数中指定伸缩因子。
8.可扩展窗口
用来隐藏或者显示多余的内容。子部件隐藏时,布局管理器自动缩小,当子部件重新显示时,布局管理器再次放大。
要设置pushButton的属性栏中选中checkable选项。
如:
void MyWidget::on_pushButton_toggled(bool checked)// 显隐窗口按钮
{
ui->textEdit->setVisible(checked); // 设置文本编辑器的显示和隐藏
if(checked) ui->pushButton->setText(tr("隐藏可扩展窗口"));
else ui->pushButton->setText(tr("显示可扩展窗口"));
}
9.分裂器(QSplitter)
可以随着分裂器的大小变化而进行相应大小变化的。
二、设置伙伴
QLineEdit* ageLineEdit = new QLineEdit(this);
QLabel* ageLabel = new QLabel("&Age",this);//'&'字符后面跟着的第一个字符即快捷键 (eg..Alt + A)
ageLabel->setBuddy(ageLineEdit);
三、设置Tab键顺序
QWidget::setTabOrder();