Bootstrap

QFormLayout

一、描述

表单布局。是一个方便的布局类,它以两列形式布置其子项。左列由标签组成,右列由“字段”小部件(行编辑器、微调框等)组成。

两列布局时使用 QFormLayout 比 QGridLayout 更加方便。

QFormLayout *formLayout = new QFormLayout;
formLayout->addRow(tr("&Name:"), nameLineEdit);
formLayout->addRow(tr("&Email:"), emailLineEdit);
formLayout->addRow(tr("&Age:"), ageSpinBox);
setLayout(formLayout);

上面的代码如果使用QGridLayout :

nameLabel = new QLabel(tr("&Name:"));
nameLabel->setBuddy(nameLineEdit);

emailLabel = new QLabel(tr("&Name:"));
emailLabel->setBuddy(emailLineEdit);

ageLabel = new QLabel(tr("&Name:"));
ageLabel->setBuddy(ageSpinBox);

QGridLayout *gridLayout = new QGridLayout;
gridLayout->addWidget(nameLabel, 0, 0);
gridLayout->addWidget(nameLineEdit, 0, 1);
gridLayout->addWidget(emailLabel, 1, 0);
gridLayout->addWidget(emailLineEdit, 1, 1);
gridLayout->addWidget(ageLabel, 2, 0);
gridLayout->addWidget(ageSpinBox, 2, 1);
setLayout(gridLayout);

二、类型成员

1、enum QFormLayout::FieldGrowthPolicy:此枚举指定用于控制表单字段增长方式的策略。

  • FieldsStayAtSizeHint:字段永远不会超出其有效大小提示(QWidgetItem::sizeHint())。
  • ExpandingFieldsGrow:水平大小策略为 Expanding MinimumExpanding 的字段将增长以填充可用空间。其他字段不会超出其有效大小提示。
  • AllNonFixedFieldsGrow:所有具有允许它们增长的大小策略的字段将增长以填充可用空间。 这是大多数样式的默认策略。

2、enum QFormLayout::ItemRole:此枚举指定可能连续出现的布局项的类型。

  • LabelRole:标签小部件。
  • FieldRole:字段小部件。
  • SpanningRole:跨越标签和字段列的小部件。

3、enum QFormLayout::RowWrapPolicy:此枚举指定控制换行方式的策略。

  • DontWrapRows:字段总是排列在它们的标签旁边。
  • WrapLongRows:标签被给予足够的水平空间以适应最宽的标签,其余的空间被给予字段。 如果所有字段中的最小大小大于可用空间,则该字段将换行到下一行。
  • WrapAllRows:字段总是在它们的标签下方。

三、属性成员

1、fieldGrowthPolicy : FieldGrowthPolicy

字段增长的方式。

默认值取决于小部件或应用程序样式。对于 QMacStyle,默认为 FieldsStayAtSizeHint;对于 QCommonStyle 派生样式,默认为 ExpandingFieldsGrow; 对于 Qt 扩展样式,默认值为 AllNonFixedFieldsGrow

如果没有一个字段可以增长并且调整大小,则会根据当前的对齐方式分配额外的空间。

2、formAlignment : Qt::Alignment

表单布局内容的对齐方式。

默认值取决于小部件或应用程序样式。对于 QMacStyle,默认为 Qt::AlignHCenter | Qt::AlignTop; 对于其他样式,默认为 Qt::AlignLeft | Qt::AlignTop

3、horizontalSpacing : int / verticalSpacing : int

并排的小部件的间距。

默认情况下,如果没有显式设置值,则布局的水平间距继承自父布局,或者继承自父窗口小部件的样式设置。

4、labelAlignment : Qt::Alignment

标签的水平对齐方式。

默认值取决于小部件或应用程序样式。对于 QCommonStyle 派生样式,默认是Qt::AlignLeft;对于其他样式,默认为 Qt::AlignRight

5、rowWrapPolicy : RowWrapPolicy

表单布局的行的换行方式。

默认值取决于小部件或应用程序样式。对于 Qt 扩展样式,默认为 WrapLongRows;对于其他样式,默认为 DontWrapRows

如果要在其关联字段上方(而不是旁边)显示每个标签,应将此属性设置为 WrapAllRows

四、成员函数

1、void addRow(QWidget *label, QWidget *field)

     void addRow(QWidget *label, QLayout *field)

使用给定的标签和字段在此表单布局的底部添加一个新行。

     void addRow(const QString &labelText, QWidget *field)

     void addRow(const QString &labelText, QLayout *field)

会在后台自动创建一个 QLabel,其中 labelText 作为其文本。

     void addRow(QWidget *widget)

     void addRow(QLayout *layout)

在此表单布局的末尾添加指定的小部件/布局。小部件/布局跨越两列。

2、void getItemPosition(int index, int *rowPtr, QFormLayout::ItemRole *rolePtr)

在 index 处检索项目的行和角色(列)。如果索引超出范围,*rowPtr 设置为 -1;否则,该行存储在 *rowPtr 中,而角色存储在 *rolePtr 中。

     void getLayoutPosition(QLayout *layout, int *rowPtr, QFormLayout::ItemRole *rolePtr)

检索指定子布局的行和角色(列)。如果 layout 不在表单布局中,*rowPtr 设置为 -1;否则,该行存储在 *rowPtr 中,而角色存储在 *rolePtr 中。 

     void getWidgetPosition(QWidget *widget, int *rowPtr, QFormLayout::ItemRole *rolePtr)

检索布局中指定小部件的行和角色(列)。如果小部件不在布局中,*rowPtr 设置为 -1;否则,该行存储在 *rowPtr 中,而角色存储在 *rolePtr 中。

3、void insertRow(int row, QWidget *label, QWidget *field)

     void insertRow(int row, QWidget *label, QLayout *field)

     void insertRow(int row, const QString &labelText, QWidget *field)

     void insertRow(int row, const QString &labelText, QLayout *field)

在此表单布局中的 row 位置插入一个新行,具有给定的标签和字段。如果row超出范围,则在末尾添加新行。

     void insertRow(int row, QWidget *widget)

     void insertRow(int row, QLayout *layout)

重载函数。小部件跨越两列。

4、QLayoutItem * itemAt(int row, QFormLayout::ItemRole role)

返回给定行中具有指定角色(列)的布局项。

5、QWidget * labelForField(QWidget *field)

     QWidget * labelForField(QLayout *field)

返回与给定字段关联的标签。

6、void removeRow(int row)

从表单布局中删除第row行。

调用之后, rowCount() 减一。占用该行的所有小部件和嵌套布局都将被删除。

如果要从布局中删除行而不删除小部件,应改用 takeRow()。

     void removeRow(QWidget *widget)

     void removeRow(QLayout *layout)

从表单布局中删除与小部件/布局对应的行。

7、int rowCount()

返回表单中的行数。

8、void setItem(int row, QFormLayout::ItemRole role, QLayoutItem *item)

将 row 行中的 role 设置为 item,必要时使用空行扩展布局。

请勿使用此功能添加子布局或子小部件项目。请改用 setLayout() 或 setWidget()。

     void setLayout(int row, QFormLayout::ItemRole role, QLayout *layout)

     void setWidget(int row, QFormLayout::ItemRole role, QWidget *widget)

将 row 行中的 role 设置为 layout / widget,必要时使用空行扩展表单布局。

对于大多数应用程序,应使用 addRow() 或 insertRow() 而不是 setLayout() / setWidget()。

 9、void setSpacing(int spacing)

将垂直和水平间距都设置为 spacing。

10、QFormLayout::TakeRowResult takeRow(int row)

       QFormLayout::TakeRowResult takeRow(QWidget *widget)

       QFormLayout::TakeRowResult takeRow(QLayout *layout)

从表单布局中移除指定的内容。注意:此功能不会删除任何内容。

如果要从布局中删除行并删除小部件,请改用 removeRow()。

在此调用之后, rowCount() 减一。 所有随后的行都向上移动一行,并且释放的垂直空间在剩余的行中重新分配。

返回包含小部件和相应标签布局项的结构。

;