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)相关推荐
- Qt布局管理器之表单布局(QFormLayout)
QFormLayout顾名思义,主要用来做表单的输入及显示.和前面讲到的QBoxLayout.QGridLayout类似,QFormLayout可以插入widget.layout,直接用QGridLa ...
- python嵌套html开发gui_python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例...
PyQt5布局控件QFormLayout简介 QFormLayout是label-field式的表单布局,顾明思议,就是实现表单方式的布局,表单是提示用户进行交互的一种模式,主要有两列组成,第一列用于 ...
- 4.UI界面PyQt-三大布局(盒子布局、网格布局、表单布局)
1.1盒子布局-BoxLayout垂直 代码如下(示例): import sysfrom PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLay ...
- 一步一步学习Bootstrap系列--表单布局
前言:Bootstrap 属于前端 ui 库,通过现成的ui组件能够迅速搭建前端页面,简直是我们后端开发的福音,通过几个项目的锻炼有必要总结些常用的知识,本篇把常用的Bootstrap表单布局进行归纳 ...
- div css表单布局的五个小技巧
div css表单布局的五个小技巧可以帮助你更灵活的控制表单,使页面更加满意. 1.表单文本输入的移动选择: 在文本输入栏中,如果加入了提示,来访者往往要用鼠标选取后删除,再输入有用的信息.其实只要加 ...
- html多级折叠菜单表单,JS实战篇之收缩菜单表单布局
获取节点的两种方式: 1.通过event对象的srcElement属性: 2.通过事件源对象用this传入. 代码如下: 收缩菜单 · 表单布局 function list(dtNode){ // v ...
- Coolite Toolkit学习笔记九:表单布局控件FormLayout与FromPanel
FormLayout在我们平时开发中使用频率非常高,使用它可快速.方便的实现表单界面布局,以及使用一些其他控件自身的特性组合起来实现丰富强大的UI界面.下面通过一个简单示例来体验FormLayout的 ...
- QT模拟表单上传文件到微信服务器
最近做微信开发,需要上传素材到微信服务器,我就用qt写了一个界面上传素材,首先我们来看下最终的界面: 然后将里面的access_token后面的lineEdit命名为:accessMediaEdit, ...
- php联系人表单,PHP联系人表单布局不允许在电子邮件中添加新行
我有这个代码的联系表单 $message = "Telephone Number: $telephone"."\n"."Job Details: $m ...
最新文章
- 图片lightbox2
- 区块链创业者:谈企业级区块链落地,传统行业的崛起(分享实录)
- excel教程自学网_Excel自学教程:万能查找函数Lookup的神应用和技巧
- python爬虫外快_利用Python爬虫轻松挣外快的几个方法(值得收藏)
- QTextBrowser显示html文件内容
- vtigerCRM 是作为一种开源CRM软件
- php each 指针,PHP each() 函数用法简介
- Vue.js实战:初识Vue.js
- 划痕分析_如何保护相机和镜头不受损坏,灰尘和划痕
- 智能手机内存完全透析
- 阳光直射对计算机有影响吗,办公电脑需要注意的风水
- David I 盛大之行
- DBC文件的编辑方法
- Meanshift聚类算法
- 基于短周期价量特征的多因子选股体系的实现(三)----因子计算
- JavaScript中string与number
- CGCS2000坐标系与其他坐标系间的差异和转换方法
- ES6 中filter过滤器的用法
- 张岚老师--上海沪师经纪--刘建
- 数据脱敏d18n之一-podman安装
热门文章
- mysql可以使用mybaties框架吗_搭建一个简单的mybatis框架
- 大数据之Hive教程
- 红袖添香唯美中国风PPT模板
- 1.5编程基础之循环控制 03 均值 python
- 华师大数据科学考研_21考研择校 | 华东师范大学软件工程怎么样?
- python3类的继承详解_python3 多重继承机制
- layui自定义ajax左侧三级菜单
- mysql如何实现逻辑自增_每日一面 - mysql 的自增 id 的实现逻辑是什么样子的?
- staf工作笔记-扩展stax官方实例的补坑说明
- C++ STL vector的容量