前言
在使用Qt设计软件的界面,布局管理器是一项非常实用且方便的功能。而相比之下,在MFC里如果需要控件位置跟随窗口大小变化还需要自己实现。布局管理器控件配合Qt Designer一起使用,能够获得更好的体验,当然如果对Qt十分的熟悉,直接用代码控制也是可以的。
布局管理器的介绍
布局管理器顾名思义就是管理ui界面布局的工具,它为界面中提供一种框架,它保证即使窗口大小发生变化时,仍能然处于其中的各个界面元素按照既定的规则排列分布。在布局管理中,界面元素两个最重要的属性就是 位置和 大小,而布局管理器能够对其进行有效的管理,让界面元素能够跟随主窗口的尺寸,动态的调整自身的位置和大小。
在Qt中布局管理有六种,他们分别是:
- 水平分布
- 垂直分布
- 使用分裂水平分布
- 使用分裂垂直分布
- 栅格分布
- 表单分布
虽然六个种类看上去有点多,但是实际上可以它们分成三类:水平分布类(包括水平分布和水平分裂分布)、垂直分布类(包括垂直分布和垂直分裂分布管理)和网格分布类(包括栅格分布和表单分布)。
其中水平分布类和垂直分布类,分别会让处于其中的界面元素成水平排列和垂直排列,在其非分布的方向上只能存在一个界面元素。加入了“分裂”两字的管理器,当大小发生变化时会要求其中界面元素的在两个方向上都要有变化,而无“分裂”两字的则纸要求在非分布方向上跟随界面改变。
如下使用垂直分布和垂直分裂分布的结果:
两种网格分布的管理器,能够定义多行多列网格,将界面元素放入每个格子里进行管理。我的理解是表单分布是比较特殊的栅格分布,当要管理的界面元素都是表单时用表单分布会比较方便,而栅格分布则比较通用。
布局管理器的使用
前面说过在Qt Designer中使用布局管理器是非常方便的,所以我这里只说明Qt Designer里的操作。在Qt Designer中使用布局管理器有两种方法:
- 一是在工具栏中直接将你要使用的布局管理器托放到界面里
- 二是将给界面里的元素添加布局管理的属性
以上这两种方法,我比较喜欢第二种,如QMainWindow和QGroupBox本身都不具有布局管理的功能,这使得放入其中得物体,都不能随窗口得大小变化而自动适应,但是通过添加布局管理功能后,就可以解决这种问题。添加方法:
选中界面元素 --> 右键弹出菜单 --> 选择“布局”菜单 --> 选择你想要得布局器
使用布局前后,再属性栏中的对比:
其他
按比例调整位置和大小
将控件放入分布管理器,当外层窗口缩放时,默认是安比例调整分布其中的控件的位置和大小的。
设置对齐
再默认情况下,分布管理器中是没有对齐的,我们可以通过右键菜单,选中分布管理器右键 –> Layout Alignment在Layout Alignment中添加一些对齐我们需要的对齐方式
使用spacer
当分布管理器中的控件很少,只能占据分布管理器的一小部分,但是我又希望分布管理仍然保持一个比较的大的框架,可以在其中添加spacer控件,它只是占据控件来撑起框架,实际界面时没有作用也不会显示。另外,还可以设置spacer控件长度或者宽度为固定值,使分布管理器保持固定大小,而不跟随外层窗口改变。