美文网首页
QLayout布局类

QLayout布局类

作者: Alliawell | 来源:发表于2024-04-26 10:13 被阅读0次

    Layout用来管理widgets,但是widgets的parent只能是widget,不能是layout。layout中所有widget的parent是layout的parentWidget()。

    Qt帮助文档里的Layout Management详细介绍了各个layout的使用。(QSplitter不是layout,而是个widget)

    QT中提供的布局器控件[1] 图1. 常用布局器的继承关系 图2. QSizePolicy的4个标志 图3. Layout的几种选项

    Layout对Widget的影响

    Layout对其中的widget做如下处理:

    1.所有的widgest都根据QWidget::sizePolicy()和QWidget::sizeHit()被分配空间。

    2.如果widgets有非零的拉伸因子(stretch factor),他们会根据比例获得空间(看下一条)。

    3.如果widgets的拉伸因子被设为0,则只有在其他widget不需要空间时才会获得更多空间。没有拉伸因子时,有Expanding属性的会优先获得更多空间。

    4.Widget如果分配的空间小于minimum值(或minimum size hint如果没有指定最小值),则他们会分配到最小的值。minimum=0就是没有设置。(当设置的stretch factor来决定大小时,则不需要设置mini或mini hint.)

    5.当widget分配的空间大于maximum szie,他们会被分配到maximum size(如果有stretch factor,则不需要有最大值)。

    QLayout永远不会把widget的大小变得比minimumSizeHint小,除非设置了minimum size或size policy设为QSizePolicy::Ignore. 如果设置了minimum size,则minimum size hint自动被忽略。

    总结:Layout先看拉伸因子,没有拉伸因子看expanding。大小先看minSize和maxSize,然后看minSizeHint。

    QLayoutBox类

    QLayoutBox占用从父Layout或parentWidget对象分得的空间,把空间分成若干个box,并让它内部的widget填满一个box(由于是填满,因此当Layout大小改变时,里面的widget的大小也会改变)。

    图4. 默认填满Layout,有弹簧时则不变

    如果QBoxLayout不是顶层的layout(它没有管理widget的所有空间和子对象),在使用它之前,你必须添加它到其父layout,最常用的方法是调用parentLayout->addLayout()。

    一个QBoxLayout如果没有父layout,则它必须有一个parentWidget,它的大小会随父对象缩放,其内部的widget也会随它缩放(因为要填满空间)。

    Layout内部的widget都变成了其parentWidget()的子对象。

    图4中最外层的QVBoxLayout有个隐含的parentWidget(通过*_ui.h代码可以看到),大小就是QVBoxLayout的大小,且不变。此时当整个窗口改变大小时,Layout的大小不变,因此其内部button的大小也不会变。

    如果把layout的父对象设为整个窗口,则窗口大小变化时,layout内部的button就会跟随改变。

    拉伸因子stretch很有用,可以设置各个box拉伸的比例,0就是不拉伸 HboxLayout的拉伸因子设为1:2:3

    QFormLayout类

    QFormLayout用来管理2列的输入表单,左边列通常是Label,右边列通常是输入框,如LineEdit,SpinBox等。

    传统上,习惯使用2列的QGridLayout来管理表单,但QFormLayout提供了更高级的功能:

    1)根据不同的OS平台自动调整外观。

    2)可以wrap(换行)长的row,对小的显示器很友好。

    3)API更友好,addRow()可以直接拿添加Label。

    FormLayout的实例 Layou还可以调整各种布局的距离

    参考

    [1].Qt界面设计时使各控件依据窗口缩放进行自适应填充的方法——使用布局、Spacer等控件

    相关文章

      网友评论

          本文标题:QLayout布局类

          本文链接:https://www.haomeiwen.com/subject/rhvnxjtx.html