Qt之基礎佈局(QFormLayout)

簡述

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
[1] Qt助手

[2] https://blog.csdn.net/liang19890820/article/details/51539339

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章