Qt布局管理按简单分可分为绝对位置布局和布局管理器布局

一、绝对位置布局:

组件不放在布局管理器中,通过函数setGeometry(x,y,width,height)来设定组件相对其父窗口的位置。其中x,y是其左上角的坐标位置,width,height是组件的宽和高。

在绝对位置布局中,resize()可以调整组件尺寸,setGeometry()可以调整组件尺寸和位置,甚至重载sizeHint()函数也可以设定组件的尺寸。

存在的问题:绝对位置布局方式,组件的位置和尺寸固定,并不会随着父窗口的尺寸的改变而发生改变。

二、布局器管理布局:

布局管理器类:QHBoxLayout,QVBoxLayout,QGridBoxLayout

布局器的优点是,组件的布局根据用户设置和系统自行布局进行确定位置和尺寸,布局方式灵活,且组件的尺寸可以根据情况发生恰当的改变,布局美观。

1)控件尺寸的设置:

注意:

1.默认情况下,使用布局器布局后,无论是resize()还是setGeometry()都会失去作用,因为布局管理器默认布局尺寸和位置是根据sizeHint()保存的数值进行布局的,这也是我们明明在程序中通过resize()、setGeometry()函数或者在qss样式表中设置了组件的尺寸和位置,但组件的尺寸和位置并不会按照我们的设想布局的原因。

2.在布局管理器中,组件的长和宽默认会随父窗口的调整而缩小或放大,以充分利用额外的空间,这就导致组件设定的尺寸并没有很好的执行的原因。

几点规律:

前提是在布局管理器中

1.组件的默认尺寸跟上述函数设置有关,但更主要根据sizeHint()的值来确定,所以别对上面的函数抱太大希望,也就是说上面的函数在布局器中会失效

sizeHint()保存着系统推荐的最佳的尺寸,默认条件下,组件的尺寸总是根据这个保存值显示。setSizePolicy可以改变显示方式。

2.如果要固定组件的尺寸,调用setFixSize()。setMaximumSize()和setMinimumSize()分别确定组件的最大和最小尺寸。

3.通常使用setSizePolicy(QSizePolicy,QSizePolicy)用来设定组件缩放模式,参数模式为:

Constant Value Description
QSizePolicy.Fixed 0 以 QWidget.sizeHint() 保存的值为定值,尺寸不再改变
QSizePolicy.Minimum GrowFlag  sizeHint()值是最小值,尺寸可以变大,但不能比sizeHint()保存的值更小
QSizePolicy.Maximum ShrinkFlag sizeHint() 值为最大值,尺寸可以被挤压到任意小,但不能比sizeHint()保存的值更大
QSizePolicy.Preferred GrowFlag | ShrinkFlag 以sizeHint()为最佳选择,但是根据情况也可以变大缩小
QSizePolicy.Expanding GrowFlag | ShrinkFlag | ExpandFlag 以sizeHint()为合理的大小,但是会尽可能为组件提供更大的空间,即倾向于扩展
QSizePolicy.MinimumExpanding GrowFlag | ExpandFlag sizeHint()是最小尺寸但也足够了,但是会尽可能获得更大的空间
QSizePolicy.Ignored ShrinkFlag | GrowFlag | IgnoreFlag 忽略sizeHint()值,尽可能获得更大的空间

2)布局管理器的设置:

布局管理器自带的函数可以用于调整组件的位置,主要函数包括:

1.setContentsMargin(int left,int top,int right,int bottom)   设置布局器距离父窗体边缘的距离;

2.setSpacing(int)   设置布局管理器内组件之间的距离,默认继承自父管理器

3.addSpacing(int size)  在布局管理器的末尾添加一个大小不可拉伸的空间(一个QSpacerItem)。 QBoxLayout提供了默认的边距和间距。 该功能增加了额外的空间。

4.addStretch(int factor)   在布局管理器末尾添加一个可拉伸空间(一个QSpacerItem)。空间最小可以为0,但由拉伸因子决定。

5.addSpacrItem(QSpacerItem(int w,int h,QSizePolicy,QSizePolicy))  添加一个QSpacerItem至布局末尾,作用相当于addSpaceing。但由于QSpacerItem空白项可根据其参数设置的模式表现固定模式或者扩展模式等,因此该函数添加的空白块是可以调节的。

最新文章

  1. Java读带有BOM的UTF-8文件乱码原因及解决方法
  2. springmvc之log4j
  3. [Unit Testing] AngularJS Unit Testing - Karma
  4. Linux CentOS6.5下编译安装MySQL 5.6.16【给力详细教程】
  5. C++中尖括号和引号的区别---转载
  6. java 笔记(2) —— 内部类的作用
  7. 关于<![CDATA[]]
  8. Dev的DocumentManager添加窗体
  9. AE 中的查找与定位,以城市查找为例
  10. ShowModal在FireMonkey移动应用程序对话框
  11. HTML标签语义对照表
  12. http2.0
  13. 左移运算符<<
  14. 翻译一篇SpiderMonkey GC的文章
  15. stack smashing detect错误修正
  16. [HDU 1428]--漫步校园(记忆化搜索)
  17. CCNP交换实验(7) -- NAT
  18. 12C cdb/pdb 配置监听
  19. jstl-按照html的形式输出至页面
  20. Docker-compose command 有多个命令例子

热门文章

  1. Java中的使用了未经检查或不安全的操作(类前加:@SuppressWarnings("unchecked"))
  2. 最小生成树——Kruskal(克鲁斯卡尔)算法
  3. python之开篇---hello world!
  4. usermod命令
  5. vue实践---vue配合express实现请求数据mock
  6. 浅析js绑定同一个事件依次触发问题系列(一)
  7. 四边形不等式优化DP——石子合并问题 学习笔记
  8. [Android]彻底去除Google AdMob广告
  9. Protobuf 语法 - 史上最简教程
  10. ajax (异步js+xml)