QT基础:遍历QFormLayout列表布局器中的控件,并链接槽函数进行操作

本文主要是介绍QT基础:遍历QFormLayout列表布局器中的控件,并链接槽函数进行操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

QFormLayout 是一个列表布局器

每一行的序号是从0开始的,类似于数组的下标

每一行有两个元素,左边的元素叫标签(Label),右边的元素叫字段(Field)

这里是一个QFormLayout简单的布局演示 QFormLayout 列表布局器演示

这里演示也是基于上面这个帖子的代码的

这是我们创建好的布局:

首先创建一个 widget 项目 可以复制这里的代码:QFormLayout列表布局器演示

1、添加两个槽函数 save  clear

在 widget.h 中声明两个槽函数:

public slots:void save();void clear();

2、在 widget.cpp中 实现一下:

// 实现槽函数
// 检查布局中的编辑框内容是否为空,则将该信息返回
void Widget::save()
{// 找到Layout, 在this里面找布局,并强制转换为QFormLayoutQFormLayout *lay = (QFormLayout *)this->layout();// 找到显示错误信息的LabelQLabel *label = (QLabel *)lay->itemAt(0,QFormLayout::FieldRole)->widget();    //将第0行右边的控件对象的窗口部件返回,并强制转换为 QLabel// 创建字符串对象,存放错误信息QString error = "";// 遍历QFormLayout里面的所有元素for(int i = 0; i < lay->rowCount(); i++)    //  rowCount 所有的行数{// 获取编辑框(列表布局中每一列的右边的元素)QLayoutItem *item = lay->itemAt(i,QFormLayout::FieldRole);  // itemAt() FieldRole 返回列中的对象(列表布局中每一列的右边的元素),没有则返回0QLineEdit *e = (QLineEdit *)item->widget(); // 将item的窗口部件强制转换为QLineEdit类型if(!e)              //判断e是否为空,如果强制转换失败则为NULL{continue;   // 这里是if判断的常规写法,下面是简写}// 获取标题(列表布局中每一列的左边的元素)QLayoutItem *layItem =  lay->itemAt(i,QFormLayout::LabelRole);  // itemAt() LabelRole 返回列中的对象(列表布局中每一列的左边的元素)if(!layItem)  continue;    // 判断每列左边的元素是否有获取到,没有则跳过本次循环QLabel *titleLabel =  (QLabel *)layItem->widget();   // 将layItem的窗口元素转换为QLabel类型if(!titleLabel)  continue;   // 判断上面是否转换成功QString titel = titleLabel->text(); // 创建字符串变量,记录每一行的标题QString cname = e->metaObject()->className();   // 获取e元对象的类名if(cname == "QLineEdit")        // 判断是否为 QLineEdit{if(e->text().trimmed() == "")   // 判断 QLineEdit 的内容去掉空格后是否为空(避免内容全部都是空格){e->setFocus();  // 获取焦点error += titel ;   // 将错误信息拼接到一起error += " 无内容\n";}}}// 将错误信息显示出来label->setText(error);
}// 将表格布局器中的编辑框内容全部清空
void Widget::clear()
{// 找到Layout, 在this里面找布局,并强制转换为QFormLayoutQFormLayout *lay = (QFormLayout *)this->layout();// 遍历所有QLineEdit元素// 遍历QFormLayout里面的所有元素for(int i = 0; i < lay->rowCount(); i++)    //  rowCount 所有的行数{QLayoutItem *item = lay->itemAt(i,QFormLayout::FieldRole);  // itemAt 返回列中的对象,没有则返回0QLineEdit *e = (QLineEdit *)item->widget(); // 将item的窗口元素强制转换为QLineEdit类型if(!e)  // 判断e是否为空,如果强制转换失败则为NULL{continue;}QString cname = e->metaObject()->className();   // 获取e元对象的类名if(cname == "QLineEdit")        // 判断是否为 QLineEdit{e->setText("");     // 将QLineEdit的内容置为空}}
}

3、记得链接两个按钮的信号和槽

Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);
//...
//...
//...
//...这里是上一个演示的代码,篇幅原因就不全部打出来了// 给按钮链接信号和槽QObject::connect(save,SIGNAL(clicked()),this,SLOT(save()) );QObject::connect(clear,SIGNAL(clicked()),this,SLOT(clear()) );}

以下是演示效果:

1、三个编辑框内没有写入任何内容,然后点击 save 按钮,布局器第0列显示错误信息

2、写入内容以后,再次点击 save 按钮,错误信息消失

3、然后直接点击 clear 按钮,编辑框内容全部置为空

 

这篇关于QT基础:遍历QFormLayout列表布局器中的控件,并链接槽函数进行操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/362472

相关文章

Mybatis对MySQL if 函数的不支持问题解读

《Mybatis对MySQLif函数的不支持问题解读》接手项目后,为了实现多租户功能,引入了Mybatis-plus,发现之前运行正常的SQL语句报错,原因是Mybatis不支持MySQL的if函... 目录MyBATis对mysql if 函数的不支持问题描述经过查询网上搜索资料找到原因解决方案总结Myb

MySQL游标和触发器的操作流程

《MySQL游标和触发器的操作流程》本文介绍了MySQL中的游标和触发器的使用方法,游标可以对查询结果集进行逐行处理,而触发器则可以在数据表发生更改时自动执行预定义的操作,感兴趣的朋友跟随小编一起看看... 目录游标游标的操作流程1. 定义游标2.打开游标3.利用游标检索数据4.关闭游标例题触发器触发器的基

Python容器转换与共有函数举例详解

《Python容器转换与共有函数举例详解》Python容器是Python编程语言中非常基础且重要的概念,它们提供了数据的存储和组织方式,下面:本文主要介绍Python容器转换与共有函数的相关资料,... 目录python容器转换与共有函数详解一、容器类型概览二、容器类型转换1. 基本容器转换2. 高级转换示

在C#中分离饼图的某个区域的操作指南

《在C#中分离饼图的某个区域的操作指南》在处理Excel饼图时,我们可能需要将饼图的各个部分分离出来,以使它们更加醒目,Spire.XLS提供了Series.DataFormat.Percent属性,... 目录引言如何设置饼图各分片之间分离宽度的代码示例:从整个饼图中分离单个分片的代码示例:引言在处理

Qt实现对Word网页的读取功能

《Qt实现对Word网页的读取功能》文章介绍了几种在Qt中实现Word文档(.docx/.doc)读写功能的方法,包括基于QAxObject的COM接口调用、DOCX模板替换及跨平台解决方案,重点讨论... 目录1. 核心实现方式2. 基于QAxObject的COM接口调用(Windows专用)2.1 环境

Python列表的创建与删除的操作指南

《Python列表的创建与删除的操作指南》列表(list)是Python中最常用、最灵活的内置数据结构之一,它支持动态扩容、混合类型、嵌套结构,几乎无处不在,但你真的会创建和删除列表吗,本文给大家介绍... 目录一、前言二、列表的创建方式1. 字面量语法(最常用)2. 使用list()构造器3. 列表推导式

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

Java利用Spire.Doc for Java实现在模板的基础上创建Word文档

《Java利用Spire.DocforJava实现在模板的基础上创建Word文档》在日常开发中,我们经常需要根据特定数据动态生成Word文档,本文将深入探讨如何利用强大的Java库Spire.Do... 目录1. Spire.Doc for Java 库介绍与安装特点与优势Maven 依赖配置2. 通过替换

MySQL基本表查询操作汇总之单表查询+多表操作大全

《MySQL基本表查询操作汇总之单表查询+多表操作大全》本文全面介绍了MySQL单表查询与多表操作的关键技术,包括基本语法、高级查询、表别名使用、多表连接及子查询等,并提供了丰富的实例,感兴趣的朋友跟... 目录一、单表查询整合(一)通用模版展示(二)举例说明(三)注意事项(四)Mapper简单举例简单查询

Nginx概念、架构、配置与虚拟主机实战操作指南

《Nginx概念、架构、配置与虚拟主机实战操作指南》Nginx是一个高性能的HTTP服务器、反向代理服务器、负载均衡器和IMAP/POP3/SMTP代理服务器,它支持高并发连接,资源占用低,功能全面且... 目录Nginx 深度解析:概念、架构、配置与虚拟主机实战一、Nginx 的概念二、Nginx 的特点