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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给