簡述
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