Qt教程-Qt Creator中定制GUI程序(界面布局)

绝大多数的GUI界面都是直接由各种控件组合堆叠而成的,有的程序界面设计的优良能从容面对各种状况(比如界面拉伸,多语言扩展),也有一些界面本身就不太友好(比如界面文字显示不全,控件不对齐),那么想设计一个友好的界面我们就必须得用到界面布局这样的功能。这里我们介绍一下Qt中界面布局的使用方法。
在Qt中进行界面布局有2种方法,第一种绝对定位,第二种布局定位。我们首先来看第一种。我们平常使用的界面大多都是长方形或者正方形,我们可以把界面想象成大棋盘,棋盘上的每一个点都有固定的坐标,我们把控件放到这些坐标点上就能堆叠出我们想要的样子。这样的布局方法就是绝对定位,控件在固定的位置不会变动。绝对定位很方便,把空间拖到想要放的地方就行了,但是很明显,如果窗体的大小做出了改变控件并不会因此做出任何响应,我们可能会因此看到界面上出现大片的留白。我们也可以通过设置窗体属性限制用户改变窗口的大小,但这并不一定是个好方法。当然我们也可以自己拦截窗口的消息事件通过自己的代码动态的确定各种控件的位置和大小,但是很显然,这样太麻烦了。
这种时候我们我们就在Qt中就可以使用布局定位的方法使得控件能够自动的拉伸各种控件或者改变控件的各种坐标。
我们先看一张示意图。

界面布局中通常是这样设计的,这里有几种布局器可以使用。
QHBoxLayout:按照水平方向从左到右布局。
QVBoxLayout:按照竖直方向从上到下布局。
QGridLayout:在一个网格中进行布局,类似于excel中单元格那样。
QFormLayout:按照表格布局,每一行前面是一段文本,文本后面跟随一个组件(通常是输入框)。
我们可以在窗口布局中嵌入其他的布局,最后形成我们看到的界面。
我们可以先创建自己的布局控件放入布局中做出自己想要的样子。这个时候可能运行起来还是不能自动缩放布局的,我们还得为窗口创建布局,并且得确保所有控件都处于可缩放的状态。
窗口创建布局:

此外所有需要缩放的控件都需要设置SizePolicy属性。这个属性来控制布局管理中的控件的尺寸自适应方式。
有下面几种属性可以选择。
Fixed:控件不能放大或者缩小,控件的大小就是它的sizeHint。
Minimum:控件的sizeHint为控件的最小尺寸。控件不能小于这个sizeHint,但是可以放大。
Maximum:控件的sizeHint为控件的最大尺寸,控件不能放大,但是可以缩小到它的最小的允许尺寸。
Expandint:控件可以自行增大或者缩小。
注:sizeHint(布局管理中的控件默认尺寸,如果控件不在布局管理中就为无效的值)

我们都选择为Expandint即可实现自适应窗口大小。
通过Qt Creator我们可以很方便的实现可视化的界面设计,当然如果有特别的需要也可以通过手工编写代码的方式来完成界面布局。
Qt文档中给出的例子如下:

该例中创建了5个Button控件,然后把控件都加入QHBoxLayout,最后形成的效果就是5个按钮按照顺序水平方向排列。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.