在特定的情况下, 我们需要显示/隐藏窗口的某一部分, 从而要求窗口的尺寸也随之变化. 如果仅仅是简单地hide()show(), 实现扩展是没问题的, 但是却不会自动收缩. 如果准确的自动收缩/扩展窗体的尺寸, 尤其是我们不应该固定尺寸, 而是应该随着控件的多少来动态调整?

这个涉及到几个函数和方法的使用.

  1. 将界面使用大的容器进行划分. 比如GroupBox, Widget等. 这样, 整个窗体是由这些顶层容器组成的, 我们可以通过计算这些顶层容器的尺寸来计算出最终的尺寸来. 而这些顶层容器, 划分的原则是, 显示/隐藏应该是在它们的粒度上进行的(这里指的是影响窗体尺寸的显示和隐藏. 如果不影响, 则没有这个约束. )
  2. 使用方法sizeHint()来获取每个容器的尺寸.
  3. 然后, 就可以使用顶层窗体的resize()函数来更改大小了.
  4. 最后, 注意一些SizeConstaint类函数的取值. 例如, Layout::setSizeConstraint(), 初始化时使用QLayout::SetMinimumSize作为参数, 当需要调整时, 按照这个顺序:
    1
    2
    3
    4
    5
    mainLayout->setSizeConstraint(QLayout::SetNoConstraint);
    //
    // 调整, 计算, ...
    //
    mainLayout->setSizeConstraint(QLayout::SetDefaultConstraint);

按照这个方式, 基本上可以实现准确的尺寸变化适配.