QFormLayout管理輸入型控件和關(guān)聯(lián)的標簽組成的那些Form表單。
QFormLayout是1個方便的布局類,其中的控件以兩列的情勢被布局在表單中。左列包括標簽,右列包括輸入控件,例如:QLineEdit、QSpinBox等。
我們可以通過addRow(const QString &labelText, QWidget *field)來創(chuàng)建1個帶有給定文本的QLabel及QWidget控件行,它們可以自動的設(shè)置為火伴關(guān)系。
QFormLayout *pLayout = new QFormLayout();
pLayout->addRow(QStringLiteral("用戶名:"), pUserLineEdit);
pLayout->addRow(QStringLiteral("密碼:"), pPasswordLineEdit);
pLayout->addRow(QStringLiteral("驗證碼:"), pVerifyLineEdit);
pLayout->setSpacing(10);
pLayout->setMargin(10);
setLayout(pLayout);
使用QGridLayout格柵布局編寫的比較:
QLabel *pUserNameLabel = new QLabel(this);
QLabel *pPasswordLabel = new QLabel(this);
QLabel *pVerifyLabel = new QLabel(this);
pUserNameLabel->setText(QStringLiteral("用戶名:"));
pPasswordLabel->setText(QStringLiteral("密碼:"));
pVerifyLabel->setText(QStringLiteral("驗證碼:"));
QGridLayout *pLayout = new QGridLayout();
pLayout->addWidget(pUserNameLabel, 0, 0);
pLayout->addWidget(pUserLineEdit, 0, 1);
pLayout->addWidget(pPasswordLabel, 1, 0);
pLayout->addWidget(pPasswordLineEdit, 1, 1);
pLayout->addWidget(pVerifyLabel, 2, 0);
pLayout->addWidget(pVerifyLineEdit, 2, 1);
pLayout->setSpacing(10);
pLayout->setMargin(10);
setLayout(pLayout);
很明顯,功能可以實現(xiàn),但是代碼量大了很多。
setRowWrapPolicy(RowWrapPolicy policy)
設(shè)置換行策略
QFormLayout::RowWrapPolicy枚舉:
控制表單行的顯示策略。
內(nèi)容 | 值 | 描寫 | 效果 |
---|---|---|---|
QFormLayout::DontWrapRows | 0 | 輸入框始終在標簽旁邊 | ![]() |
QFormLayout::WrapLongRows | 1 | 標簽有足夠的空間適應,如果最小大小比可用空間大,輸入框會被換到下1行 | ![]() |
QFormLayout::WrapAllRows | 2 | 輸入框始終在標簽下邊 | ![]() |
setWidget(int row, ItemRole role, QWidget *widget)
設(shè)置行row所對應的控件,如果role為LabelRole時,設(shè)置的為標簽所對應的控件,如果role為FieldRole時,設(shè)置的為輸入框所對應的控件。
QFormLayout::ItemRole枚舉:
指定1排控件的類型
內(nèi)容 | 值 | 描寫 |
---|---|---|
QFormLayout::LabelRole | 0 | 標簽 |
QFormLayout::FieldRole | 1 | 輸入框 |
QFormLayout::SpanningRole | 2 | 逾越標簽和輸入框的控件 |
例如:
//pLayout->addRow(pUserNameLabel, pUserLineEdit);
pLayout->setWidget(0, QFormLayout::LabelRole, pUserNameLabel);
pLayout->setWidget(0, QFormLayout::FieldRole, pUserLineEdit);
setVerticalSpacing(int spacing)
設(shè)置間距(水平間距、垂直間距)
QWidget * QFormLayout::labelForField(QWidget * field)
通過field獲得field對應的標簽,這里不1定是QLabel,返回值為QWidget。
當要設(shè)計的界面是1種類似于兩列和若干行組成的情勢時,使用QFormLayout(表單布局)要比QGridLayout(柵格布局)更加方便些。
當界面元素較為復雜時(多行多列),應絕不猶豫的盡可能使用柵格布局,而不是使用水平和垂直布局的組合或嵌套的情勢,由于在多數(shù)情況下,后者常常會使“局勢”更加復雜而難以控制。柵格布局賦予了界面設(shè)計器更大的自由度來排列組合界面元素,而僅僅帶來了微小的復雜度開消。