Qt之表单布局(QFormLayout)

原创 2016年05月30日 17:06:59

简述

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(栅格布局)更为方便些。

当界面元素较为复杂时(多行多列),应毫不犹豫的尽量使用栅格布局,而不是使用水平和垂直布局的组合或者嵌套的形式,因为在多数情况下,后者往往会使“局势”更加复杂而难以控制。栅格布局赋予了界面设计器更大的自由度来排列组合界面元素,而仅仅带来了微小的复杂度开销。

版权声明:进步始于交流,收获源于分享!纯正开源之美,有趣、好玩、靠谱。。。作者:一去丶二三里 博客地址:http://blog.csdn.net/liang19890820

相关文章推荐

QFormLayout 使用总结

参考Qt之表单布局用法QFormLayout *pLayout = new QFormLayout(); pLayout->addRow(QStringLiteral("用户名:"), pUserLi...

Qt之表单布局(QFormLayout)

 简述 QFormLayout管理输入型控件和关联的标签组成的那些Form表单。 QFormLayout是一个方便的布局类,其中的控件以两列的形式被布局在表单中。左列包括标签,右列包含输入控...

Qt的5种常用布局搭建

Qt布局详解:   界面开发首先要对整个界面进行布局,使窗体上的所有的控件必须有一个合适的尺寸和位置。那么做出来的界面才看起来美观。 那么如何对界面进行布局呢?Qt提供了一些类负责排列窗体上的控件,主...

Qt FormLayout 使用

Data Mining Qt4--FormLayout FormLayout显然对于Form非常适合。 QFormLayout *formLay=new QFormLayout;...

Qt入门-layout布局

开发一个图形界面应用程序,界面的布局影响到界面的美观。在设计一个界面之前,应该考虑到开发的界面可能给不用的用户使用,而用户的屏幕大小、纵横比例、分辨率可能不同,界面还可能是可缩放的,程序应该可以适应这...
  • xgbing
  • xgbing
  • 2012年07月19日 18:40
  • 55146

Qt布局管理详解

Qt布局管理手册: http://doc.qt.io/qt-5/qtwidgets-index.html#styles http://doc.qt.io/qt-5/qtwidgets-index....

Qt学习七:控件四:表格控件、网格布局、

这是第四波控件: 首先,qtButton.h如下: #ifndef QTBUTTON_H #define QTBUTTON_H #include #include "ui_qtbutton.h" ...

用vs创建Qt form并和对应的form类关联

我用vs2010创建一个qt的 .ui文件,但是却没有对应的form类生成,我对应着mainwindow的文件创建出了相应的类文件,并关联上。方法有点笨,如果您有更好的方法可以留言,分享一下。 ...

Qt入门-表格类QTableWidget

表格是GUI中常用的控件,在Qt中,常用的表格类是QTableWidget。     示例: QTableWidget *table = new QTableWidget(4,2); //新...
  • xgbing
  • xgbing
  • 2012年07月23日 11:43
  • 29813

QT网格布局,水平布局,垂直布局设计代码讲解

QT水平布局:头文件 #include #include #include #include #include int main(int argc, char *argv[]) ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt之表单布局(QFormLayout)
举报原因:
原因补充:

(最多只允许输入30个字)