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::DontWrapRows0输入框始终在标签旁边


QFormLayout::WrapLongRows1标签有足够的空间适应,如果最小大小比可用空间大,输入框会被换到下一行


QFormLayout::WrapAllRows2输入框始终在标签下边


总结


当设计的界面是由多行组成时,使用QFormLayout要比QGridLayout更为方便些。

reference
[1] Qt助手

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值