Qt自适应窗口的布局
在Qt中,窗口里面用来布局的控件主要分为两种:
第一种(layouts)
第二种(widget)
其中,layouts是专门用来布局的控件,而widget控件主要功能并非布局,只是带有布局的功能而已(widget可以看作是一个电路板,虽然它可以控制电路板上元器件的布局,但实际上它的主要功能是用来控制上面的这些元器件的整体工作)。
至于该使用哪一个,一般而言,如果需要某几个控件协同完成一种功能的时候,就把它们放在一个widget上面(因为之后我们还需要对其进行封装工作,以实现其功能)。如果只是对一些联系较松的版块进行布局的时候我们就直接使用layout。
如果我们不使用布局控件,就会明显发现当我们运行程序改变窗口的大小的时候,里面的控件大小是不变的,这显然是不对的,我们多半是希望里面的内容能够随窗口整体的变大而变大,缩小而缩小。
无论是layouts还是widget都是先把控件的框拖出来,然后把东西(按钮、label啥的)往上扔。
如果是widget的话还需要点击布局方式,我这里点击水平布局:
打破布局即删除当前的布局layout,如果你使用的widget的话,只会撤销布局,并不会删除widget控件。
然后其实我们最大的窗口本身就是一个widget,点击最大的这个窗口,点击垂直布局(或者其他),这时整体大小就可以自适应了,即各个版块随着窗口的变大而变大,缩小而缩小。
*如果我们是使用的MainWindow,注意之后调整布局的时候使用centralWidget进行最大的那个布局。因为最上面的MainWindow没有layout属性,也就无法进行之后的布局比例设置。
当我们完成之后,这时后又会发现问题,
即每一层的布局大小完全是平均分配的
很多时候我们需要两个版块的比例不是1比1,可能是3比8、1比9或者其他。
这时我们点击layout控件或者widget控件可以发现属性:
在layoutStretch中可以调整每个版块占比,默认为0:0:0(如果分为三块的话),如果我们设置成1,2,3这时就会变成1:2:3。
除了水平布局和垂直布局之外,还有栅格布局。栅格布局即几行几列,这个比较容易,放着放着就知道了。。。(往下放就会下面出蓝线,即将内容放在下行。往右放就会右面出蓝线,即将内容放在右列。)
接下来我们可以顶弹簧(就是进行一定的留白):
直接将其拖拽到需要留白的地方即可,弹簧也和控件一样在布局中可以按比例设置。
当然,运行的时候没有蓝色部分的。。。
最后我们可以设置一些相关属性,进行一些细节的处理。
控件中的sizePolicy属性
Preferred:默认
Fixed:即按里面的控件的大小固定
Expanding:充满相应的布局格
调整间隙
layoutSpacing为版块之间的间隙
最后是上下左右的边界间隙