简述
QFormLayout类管理输入窗口小部件的形式及其关联的标签。
QFormLayout是一个便捷的布局类,以两列的形式布局其子控件。左列包含标签,右列包含输入型控件(行编辑器,旋转框等)
使用
效果如下
源码
QLineEdit *lineEdit1 = new QLineEdit;
QLineEdit *lineEdit2 = new QLineEdit;
QLineEdit *lineEdit3 = new QLineEdit;
QFormLayout *formLayout = new QFormLayout;
formLayout->addRow(tr("&Name:"), lineEdit1);
formLayout->addRow(tr("&Email:"), lineEdit2);
formLayout->addRow(tr("&Age:"), lineEdit3);
this->setLayout(formLayout);
用QGridLayout实现
QLabel *nameLabel = new QLabel(tr("&Name:"));
nameLabel->setBuddy(lineEdit1);
QLabel *emailLabel = new QLabel(tr("&Email:"));
emailLabel->setBuddy(lineEdit2);
QLabel *ageLabel = new QLabel(tr("&Age:"));
ageLabel->setBuddy(lineEdit3);
QGridLayout *gridLayout = new QGridLayout;
gridLayout->addWidget(nameLabel, 0, 0);
gridLayout->addWidget(lineEdit1, 0, 1);
gridLayout->addWidget(emailLabel, 1, 0);
gridLayout->addWidget(lineEdit2, 1, 1);
gridLayout->addWidget(ageLabel, 2, 0);
gridLayout->addWidget(lineEdit3, 2, 1);
this->setLayout(gridLayout);
非常明显,虽然功能一样,但是用QGridLayout代码量要多很多。
常用接口
- 添加新行
- addRow(QWidget *label, QWidget *field)
- addRow(QWidget *label, QLayout *field)
- addRow(const QString &labelText, QWidget *field)
- addRow(const QString &labelText, QLayout *field)
- addRow(QWidget *widget)
- addRow(QLayout *layout)
在QFormLayout中添加新行,这些行以不同的形式出现,可以是标签加输入框,可以是标签加布局、单独的输入框、单独的布局等等。
- 插入新行
- insertRow(int row, QWidget *label, QWidget *field)
- insertRow(int row, QWidget *label, QLayout *field)
- insertRow(int row, const QString &labelText, QWidget *field)
- insertRow(int row, const QString &labelText, QLayout *field)
- insertRow(int row, QWidget *widget)
- insertRow(int row, QLayout *layout)
在此表单布局的位置行插入带有给定的标签和字段的新行。如果行超出范围,则将新行插入末尾。
- 输入域标签
- labelForField(QWidget *field) const
- labelForField(QLayout *field) const
返回指定输入域对应的标签
- 移除行
- removeRow(int row)
- removeRow(QWidget *widget)
- removeRow(QLayout *layout)
移除某一行,同时删除对应的控件
- 设置间距
- setSpacing(int spacing)
- setVerticalSpacing(int spacing)
- setHorizontalSpacing(int spacing).
setSpacing可以同时设置水平和垂直间距,setVerticalSpacing和setHorizontalSpacing可以分别设置水平和垂直间距。
- 设置换行模式
- setRowWrapPolicy(RowWrapPolicy policy)
QFormLayout::RowWrapPolicy
值 | 值 | 描述 | 效果 |
---|---|---|---|
QFormLayout::DontWrapRows | 0 | 输入框始终在标签旁边 |
|
QFormLayout::WrapLongRows | 1 | 标签有足够的空间适应,如果最小大小比可用空间大,输入框会被换到下一行 |
|
QFormLayout::WrapAllRows | 2 | 输入框始终在标签下边 |
|
总结
当设计的界面是由多行组成时,使用QFormLayout要比QGridLayout更为方便些。
reference |
[2] https://blog.csdn.net/liang19890820/article/details/51539339