Qt布局之QFormLayout

初识QFormLayout

之前已经了解过QBoxLayout(包括QHBoxLayout和QVBoxLayout)和QGridLayout。在测试上述布局时使用了简单的登录框作为例子。我们发现输入框前面都有个标签用于说明其作用,每个标签都是手动去new出来的,如果遇到需要很多输入框的情况就会很麻烦,这时候使用QFormLayout的方式布局就轻松多了。直接上栗子:

image.png

使用QFormLayout布局省去了手动创建label的步骤,代码变得清爽了许多。接下来好好了解一下QFormLayout吧。

QFormLayout可以看作是只有两列的QGridLayout,第一列是标签域(label),第二列是字段域(field)。如例子中的“姓名”、“性别”、"年龄"是标签域,nameEdit、sexCombo、ageSpin是字段域。QFormLayout通过addRow函数添加标签域和字段域。也可以使用addWidget函数,该函数从QLayout类继承,添加的部件会放在字段域。


移除布局中的内容

QFormLayout移除部件使用 removeRow函数。removeRow有三个重载函数:

image.png

第一个是通过指定行的下标来移除指定的行,后两个函数和addRow的重载是对应的,这也说明了QFormLayout不仅可以添加部件,也可以添加布局,也就是布局的嵌套。

image.png

FieldGrowthPolicy

了解了QFormLayout的基本用法后,我觉得还有必要了解一下QFormLayout的一些属性,首先就是FieldGrowthPolicy,它表示字段域的增长策略。有三个值可选:FieldsStayAtSizeHint、ExpandingFieldsGrow和AllNonFixedFieldsGrow。FieldsStayAtSizeHint表示字段域不超过其有效的sziehint。ExpandingFieldsGrow表示如果字段域的水平大小策略是Expanding或MinimumExpanding那么它就会在填满可用空间。AllNonFixedFieldsGrow表示字段域不是设置固定大小的话,它就会填满可用空间。


FieldGrowthPolicy的默认值取决于应用程序使用的风格,如QMacStyle默认值FieldsStayAtSizeHint。QWindowsXPStyle默认值是AllNonFixedFieldsGrow。测试例子如下图:

image.png


RowWrapPolicy
RowWrapPolicy用于指定一行中的字段域是否换行。有三个值可选:DontWrapRows、WrapLongRows、WrapAllRows。DontWrapRows表示不换行、WrapAllRows表示换行、WrapLongRows表示剩余给字段域的空间不够时换行。测试例子如下图:

image.png




演示站
上一篇:python3之如何读写文件
下一篇:Qt布局之QStackedLayout

发表评论