Qt之表单布局(QFormLayout)
簡述
QFormLayout管理輸入型控件和關聯的標簽組成的那些Form表單。
QFormLayout是一個方便的布局類,其中的控件以兩列的形式被布局在表單中。左列包括標簽,右列包含輸入控件,例如:QLineEdit、QSpinBox等。
- 簡述
- 使用
- 常用接口
- 總結
使用
我們可以通過addRow(const QString &labelText, QWidget *field)來創建一個帶有給定文本的QLabel及QWidget控件行,它們可以自動的設置為伙伴關系。
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);很顯然,功能可以實現,但是代碼量大了很多。
常用接口
-
setRowWrapPolicy(RowWrapPolicy policy)
設置換行策略
QFormLayout::RowWrapPolicy枚舉:
控制表單行的顯示策略。
| QFormLayout::DontWrapRows | 0 | 輸入框始終在標簽旁邊 | |
| QFormLayout::WrapLongRows | 1 | 標簽有足夠的空間適應,如果最小大小比可用空間大,輸入框會被換到下一行 | |
| QFormLayout::WrapAllRows | 2 | 輸入框始終在標簽下邊 |
-
setWidget(int row, ItemRole role, QWidget *widget)
設置行row所對應的控件,如果role為LabelRole時,設置的為標簽所對應的控件,如果role為FieldRole時,設置的為輸入框所對應的控件。
QFormLayout::ItemRole枚舉:
指定一排控件的類型
| 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);- setSpacing(int spacing)
- setHorizontalSpacing(int spacing)
-
setVerticalSpacing(int spacing)
設置間距(水平間距、垂直間距)
-
QWidget * QFormLayout::labelForField(QWidget * field)
通過field獲取field對應的標簽,這里不一定是QLabel,返回值為QWidget。
總結
當要設計的界面是一種類似于兩列和若干行組成的形式時,使用QFormLayout(表單布局)要比QGridLayout(柵格布局)更為方便些。
當界面元素較為復雜時(多行多列),應毫不猶豫的盡量使用柵格布局,而不是使用水平和垂直布局的組合或者嵌套的形式,因為在多數情況下,后者往往會使“局勢”更加復雜而難以控制。柵格布局賦予了界面設計器更大的自由度來排列組合界面元素,而僅僅帶來了微小的復雜度開銷。
總結
以上是生活随笔為你收集整理的Qt之表单布局(QFormLayout)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2017.3.24组合数学学习——容斥原
- 下一篇: Java 接口小总结;