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

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