QSizePolicy描述着控件在布局管理器中水平方向和垂直方向大小拉伸的策略,重点是在布局管理器中,由布局管理器来控制控件两个方向的大小是如何变化,而这个策略与sizeHint()属性(控件的建议大小,控件必须是在布局管理器中该属性才有效)息息相关。
QSizePolicy::Fixed | 0 | 控件的大小固定为sizeHint的推荐大小,不能在改变; |
QSizePolicy::Minimum | GrowFlag | 控件的大小最小为sizeHint的推荐大小,可以往大了拉伸,但最小不可小过sizeHint; |
QSizePolicy::Maximum | ShrinkFlag | 控件的大小最大为sizeHint的推荐大小,可以往小了缩小,但最大不可大过sizeHint; |
QSizePolicy::Preferred | GrowFlag | ShrinkFlag | sizeHint大小比较的合理,最小还是sizeHint,但是拉伸比较倾向于不超过sizeHint; |
QSizePolicy::Expanding | GrowFlag | ShrinkFlag | ExpandFlag | 顾名思义就是扩大呗,最小不能小过sizeHint,拉伸就随意了; |
QSizePolicy::MinimumExpanding | GrowFlag | ExpandFlag | 与Minimum差不多,最小为sizeHint,不能再小了,也可以拉伸。区别就是和同一方向的其他控件一块布局时会尽可能的占有空间,除非它们也是这个策略; |
QSizePolicy::Ignored | ShrinkFlag | GrowFlag | IgnoreFlag | 控件的大小不再与sizeHint相关,可以尽情的拉伸,也可以缩小比sizeHint建议的小,毕竟忽略了; |
如果布局管理器中只有一个控件被设置这些策略时,后四个基本没什么区别,除了缩小方面最后一个可以小于sizeHint(),放大方面都是尽可能的拉伸;而如果布局管理器中放置了两个控件,以垂直方向为例,不同的策略会影响控件占用的空间优势,比如控件1设置为Preferred,控件2设置为Expanding,此时2会占用更可能多的空间,而1只能缩小到最小(sizeHint的大小);如果1为MinimumExpanding,2不变,两者占用比例相同;如果1为Ignored,2不变,控件1直接看不到了;
如果按占用空间的优势排序的话,应该是这样:
MinimumExpanding=Expanding>Preferred=Minimum=Ignored>Maximum=Fixed
目前我理解的只是这样,可能还有错误,做个参考还行,不要全信。