11.8 问题与解答

问:关于 layout 布局与控件的大小

尽管我把一个窗口部件的 size 高和宽都设为 fixed,但是每次选用 layout 功能时,窗 口部件的 size 又会发生变化,有什么办法让窗口部件的大小一直维持在自己定义的大小, 无论外界布局做任何变化都不受影响?

答:与这个问题相关的内容很多,就是说布局受影响的因素很多。比如几种大小策略 在一起时的优先问题,某个大小策略的 “倾向性”问题,布局内部的各个窗口部件有没有设 置伸缩因子等问题,等等。通常你首先需要设置窗体的顶级布局,然后为窗体内的窗口部件 设置大小策略、伸缩因子、最大大小、最小大小等。另外,在需要绘制比较复杂的布局时, 手写代码的控制能力通常更强一些。

问:请教 Qt 布局的问题

最近发现在代码中手动建立的控件和布局 ,在窗口最大化的时候就可以自动调整大小,但是在 Qt desinger 里面画好的界面,虽然也加了布局,但是在窗口最大化的时候却 无法自动调整控件的大小,以至于最大化以后,旁边就有好多的空白。请问这种问题怎么解 决,怎么可以在使用 Qt desinger 的情况下,也让控件可以自动调整大小以适应窗口大小 的改变?

答:你的这个问题很典型,这是由于你没有为整个的窗体设置一个顶级布局的缘故。 设置了顶级布局之后,窗体上的所有窗口部件都处于它的管理之下,就能够实现整体的联动 了。

要查看你的窗体有没有设置顶级布局,可以在对象查看器中可以看到是否设置了布 局,以及布局是什么类型的。

另外,如果你对布局与窗体边界间的空白不是很满意,可以设置它,就是设置 margin,你可以阅读本章的内容,在里面有详细的使用方法。

问:容器内部的部件如何布局 我有三个容器已经布局好了,现在想将容器内部部件进行布局,使之能够跟所属容器同时变大或缩小,这个该怎么办呢?

答:添加布局的方法都大致如此:

第 1 步,定义布局内要用到的窗口部件

第 2 步,定义一个布局

第 3 步,把第 1 步定义的窗口部件加入到布局中

第 4 步,把布局安装到它的父窗口上

其中第 4 步就是针对你说的问题,你只需要把那些容器的实例作为布局的父窗口就可 以了。