Qt中的动态布局
在特定的情况下, 我们需要显示/隐藏窗口的某一部分, 从而要求窗口的尺寸也随之变化. 如果仅仅是简单地hide()
和show()
, 实现扩展是没问题的, 但是却不会自动收缩. 如果准确的自动收缩/扩展窗体的尺寸, 尤其是我们不应该固定尺寸, 而是应该随着控件的多少来动态调整?
这个涉及到几个函数和方法的使用.
- 将界面使用大的容器进行划分. 比如
GroupBox
,Widget
等. 这样, 整个窗体是由这些顶层容器组成的, 我们可以通过计算这些顶层容器的尺寸来计算出最终的尺寸来. 而这些顶层容器, 划分的原则是, 显示/隐藏应该是在它们的粒度上进行的(这里指的是影响窗体尺寸的显示和隐藏. 如果不影响, 则没有这个约束. ) - 使用方法
sizeHint()
来获取每个容器的尺寸. - 然后, 就可以使用顶层窗体的
resize()
函数来更改大小了. - 最后, 注意一些
SizeConstaint
类函数的取值. 例如,Layout::setSizeConstraint()
, 初始化时使用QLayout::SetMinimumSize
作为参数, 当需要调整时, 按照这个顺序:1
2
3
4
5mainLayout->setSizeConstraint(QLayout::SetNoConstraint);
//
// 调整, 计算, ...
//
mainLayout->setSizeConstraint(QLayout::SetDefaultConstraint);
按照这个方式, 基本上可以实现准确的尺寸变化适配.
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 编程随笔!