1.7 控件之间的关系

开发一个图形界面应用程序时,不仅要实现功能,还需要考虑图形界面的美观和操作方便性。界面控件的排列方式、布局、按钮文字图标、菜单文字图标等都会影响界面的美观,界面上的快捷键、Tab键的顺序会影响操作方便性。在设计一个界面之前,应该考虑到开发的界面可能由不同的用户使用,而用户电脑的屏幕大小、纵横比例、分辨率也不尽相同等。

1.7.1 控件的布局

窗口显示后,可以调整窗口的位置和大小,当窗口尺寸变小时,有些控件会被窗口挡住,而窗口变大时,在控件的外面会产生很大尺寸的空白。如图1-22所示为前面创建的输入学生成绩的窗口,调整窗口尺寸时都会影响控件的显示。我们希望在窗口变化尺寸时,有些控件相对窗口的位置不变,有些控件随窗口的缩放也进行相应的缩放。

图1-22 窗口尺寸的变化

(a)窗口尺寸变小;(b)窗口尺寸变大

控件在窗口中的位置可以用代码来确定,每个控件都有宽度和高度值,还可以确定控件左上角在窗口的位置,因此可以用代码来设置控件的位置和大小,不过这样需要写大量的代码,而且也不直观。最经济的方法是在Qt Designer中可视化地进行控件的布局。

1.布局的类型

Qt Designer中控件的布局可以分为以下4种类型。

(1)水平布局(QHBoxLayout),可以把多个控件以水平的顺序依次排开;

(2)竖直布局(QVBoxLayout),可以把多个控件以竖直的顺序依次排开;

(3)栅格布局(QGridLayout),可以以网格的形式把多个控件以矩阵形式排列;

(4)表单布局(QFormLayout),可以以两列的形式排列控件。

布局之间还支持嵌套布局,即一种布局中包含其他形式的布局,这些布局的样式如图1-23所示。

图1-23 布局样式

(a)水平布局;(b)竖直布局;(c)表单布局;(d)嵌套布局

Qt Designer中对控件进行布局可以分为两种方式:一种是先创建控件,然后选中控件,再单击工具栏中对应的布局控件,工具栏中的布局控件有;另一种是先从Layouts控件中拖放布局控件到窗口上,然后再往布局控件中放置控件,Layouts控件中的布局控件有。另外,还可以在Spacers控件中选择控件来调整控件与布局控件的距离。在进行控件布局设计时,可以设置每个控件的最小宽和高属性及最大宽和高属性,来限制控件可以调整的范围,如设置最小宽和最大宽的值相同,在调整窗口尺寸时,控件的宽度始终不变。

2.控件布局实例

下面以学生成绩录入窗口的控件布局为例,说明在Qt Designer中进行窗口布局的方法。

第1步,启动Qt Designer,打开上一节创建的student_new.ui文件或本书附带文件student_layout.ui,单击学生基本信息Group Box控件,单击工具条上的水平布局按钮,然后在属性对话框中找到layoutStretch属性,将其值设置成“0,1,0,1”,表示相对缩放比例实数,完成学生基本信息内的控件的布局。

第2步,单击学生成绩Group Box控件,然后单击工具栏上的表单布局按钮,对学生成绩内的控件进行表单布局。用同样的方法为成绩统计Group Box控件设置表单布局。

第3步,按住键盘上的Ctrl键,单击学生成绩Group Box控件和成绩统计Group Box控件,选中这两个控件,然后单击工具栏上水平布局按钮,在属性对话框中找到layoutStretch属性,将其值设置成“1,1”。

第4步,从Spaces中拖放两个分别放到“计算”按钮的左边和“关闭”按钮的右边,如图1-24(a)所示,然后按住Ctrl键,从左到右依次选中、“计算”按钮、“保存”按钮、“关闭”按钮和,然后单击工具栏中的水平布局按钮

第5步,从Spaces中拖放两个,放到如图1-24(b)所示的位置,最后单击窗体,不用选中任何控件,单击工具栏上的竖直布局按钮,这时如果缩放窗口,窗口内的控件也会跟着缩放。在以上操作中,如果出现问题可以单击工具栏中的按钮取消布局。

图1-24 学生基本信息内的控件的布局

(a)水平间隙;(b)竖直间隙

完成以上操作后,将ui重新转换成py文件,运行前面的程序,可以发现控件会随窗口的缩放而缩放。除了以上布局样式外,还有一种分割器布局,对于这种布局将在2.5.4节中介绍,并在后续的讲解中会多次用代码的形式创建分割器。以上是在Qt Designer中建立布局,本书还会详细介绍各种布局控件的方法,并在后边的实例中用代码直接创建布局。

1.7.2 控件的Tab键顺序

Tab键顺序是程序运行时,按键盘上的Tab键,控件依次获取焦点的顺序。要编辑各控件的Tab顺序,需要单击Qt Designer工具条上的按钮,进入编辑Tab键顺序状态,如图1-25所示,依次单击控件上蓝色数字框即可。如果点错,可以右击,从弹出的快捷菜单中选择“重新开始”命令。

图1-25 编辑控件的Tab键顺序

另外一种编辑Tab键顺序的方法是在窗口中右击,从弹出的快捷菜单中选择“制表符顺序列表”命令,弹出“制表符顺序列表”对话框,单击按钮调整顺序。

1.7.3 控件之间的伙伴关系

控件的伙伴关系是指控件与Label标签是关联的,在按Label标签的快捷键(Alt键+字母)时,焦点能快速移动到关联的控件上,这时Label标签的text属性中要有“&”和字符,程序运行时不会显示“&”,而是在字符下面加下划线,表示快捷键。在前面输入学生成绩的界面中,先修改Label标签控件的text属性,例如把“姓名”修改成“姓名(&N)”,再单击Qt Designer工具条上的按钮进入伙伴关系编辑状态,用鼠标左键选择一个Label标签控件,并拖拽到一个目标控件上,如图1-26所示。这时标签控件与目标控件建立了伙伴关系,标签名称中的“&”符号也消失了。

图1-26 伙伴关系编辑状态