Qt使用QTextEdit来批量添加数据到数据库中

news2024/12/24 0:13:37

1.首先要了解QTextEdit的遍历方式

在下面的文章中已经介绍,这里就不在介绍了:

富文本处理(QTextEdit)_旷工锁的博客-CSDN博客_qtextedit 富文本

基本步骤为:

  1. 创建一个QTextEdit
  2. 使用QTextDocument来获取QTextEdit中的记录
  3. 通过QTextBolck 数据块来访问内容

注意:一般遇到回车就为一个数据块,更复杂的有子块就不介绍了

 2.数据库要建好和链接好,然后在ui界面中弄出框架

框架如下:(数据库里使用的都是nchar())方便演示

 3.具体步骤:

  • 分别获取这四个QTextEdit的记录
  • 然后获取这几个记录中的最多数据块的数量,方便遍历
  • 获取QTextEdit中的数据块
  • 通过QTextBlock::next(),一直遍历到最后
  • 如果需要添加限制的话,可以使用QStringList来存储未成功添加的数据
  • 然后删除QTextEdit中的全部数据
  • 然后把QStringList中的数据添加到QTextEdit中
void Administrator::on_pushButton_7_clicked()//批量添加员工
{
    QTextDocument * Doc_id=ui->textEdit->document();//获取记录
    QTextDocument * Doc_name=ui->textEdit_2->document();
    QTextDocument * Doc_account=ui->textEdit_3->document();
    QTextDocument * Doc_password=ui->textEdit_4->document();

    QTextBlock block=Doc_id->firstBlock();//获取第一个文本块
    QTextBlock block_2=Doc_name->firstBlock();
    QTextBlock block_3=Doc_account->firstBlock();
    QTextBlock block_4=Doc_password->firstBlock();

    //获取最大的数据块数量
    int number=qMax(qMax(Doc_id->blockCount(),Doc_name->blockCount())
                    ,qMax(Doc_account->blockCount(),Doc_password->blockCount()));

    //使用QStringList存放未添加成功的数据
    QStringList list;
    QStringList list2;
    QStringList list3;
    QStringList list4;

    for(int i=0;i<number;i++)//使用最大的文本块个数进行遍历
    {
        //在这里我在lineEdit中添加了正则表达式,来限制输入
        //往lineEdit中添加数据
        ui->lineEdit_3->setText(block.text());
        ui->lineEdit_4->setText(block_2.text());
        ui->lineEdit_5->setText(block_3.text());
        ui->lineEdit_6->setText(block_4.text());

        //使用hasAcceptableInput()来判断内容是否符合规则
        bool id=ui->lineEdit_3->hasAcceptableInput();
        bool name=ui->lineEdit_4->hasAcceptableInput();
        bool account=ui->lineEdit_5->hasAcceptableInput();
        bool password=ui->lineEdit_6->hasAcceptableInput();

        //如果4个数据都符合规则,把数据插入到数据库中
        if(id&&name&&account&&password)
        {
            QSqlQuery q;
            QString S=QString("insert into Login values ('%1','%2','%3','%4')")
                    .arg(block.text()).arg(block_2.text()).arg(block_3.text()).arg(block_4.text());

            if(q.exec(S))//添加成功的话,输出添加成功
            {
                qDebug()<<"添加成功";
            }
            else//添加失败的话,可能数据重复,然后把未添加的数据添加到QStringList中
            {
                list<<(block.text());
                list2<<(block_2.text());
                list3<<(block_3.text());
                list4<<(block_4.text());
            }

        }
        else//如果不符合规则的话,直接把未添加的数据添加到QStringList中
        {
            list<<(block.text());
            list2<<(block_2.text());
            list3<<(block_3.text());
            list4<<(block_4.text());
        }

        //获取下一个数据块
        block=block.next();
        block_2=block_2.next();
        block_3=block_3.next();
        block_4=block_4.next();
    }

    //遍历结束
    //清空QTextEdit中的数据
    Doc_id->clear();
    Doc_name->clear();
    Doc_account->clear();
    Doc_password->clear();

    //如果存储未添加数据的列表全部为空的话,输出全部添加
    if(list.isEmpty()&&list2.isEmpty()&&list3.isEmpty()&&list4.isEmpty())
    {
        QMessageBox::information(this,"提示信息","已全部添加",QMessageBox::Ok);
    }
    else//如果有未添加数据,把未添加的数据输出在QTextEdit中,然后输出未完全添加
    {
        for(QString &s:list)
        {
            ui->textEdit->append(s);
        }
        for(QString &s:list2)
        {
            ui->textEdit_2->append(s);
        }
        for(QString &s:list3)
        {
            ui->textEdit_3->append(s);
        }
        for(QString &s:list4)
        {
            ui->textEdit_4->append(s);
        }
        QMessageBox::information(this,"提示信息","未完全添加,以下为未添加的内容。",QMessageBox::Yes);
    }

}

在这里给出QLineEdit的正则表达式,方便展示和理解:

    ui->lineEdit_3->setPlaceholderText("1-10位数字且第一个数不能为0");
    QRegExp exp1("^[1-9][0-9]{0,9}$");//id为1-10位数,且第一个数不能为0
    ui->lineEdit_3->setValidator(new QRegExpValidator(exp1,this));//id的lineEdit_3添加验证器

    ui->lineEdit_4->setPlaceholderText("2-7位中文");
    QRegExp exp2("^[\u4e00-\u9fa5]{2,7}$");//name 为2-7位,只能为中文
    ui->lineEdit_4->setValidator(new QRegExpValidator(exp2,this));//账号的lineEdit添加验证器

    ui->lineEdit_5->setPlaceholderText("account 为10位,且第一个数不能为0");
    QRegExp exp3("^[1-9][0-9]{9}$");//account 为10位,且第一个数不能为0
    ui->lineEdit_5->setValidator(new QRegExpValidator(exp3,this));//账号的lineEdit添加验证器

    ui->lineEdit_6->setPlaceholderText("password 为数字和字母8-16位");
    QRegExp exp4("^[\\d\\w]{8,16}$");//password 为数字和字母8-16位
    ui->lineEdit_6->setValidator(new QRegExpValidator(exp4,this));//账号的lineEdit添加验证器

输入以下数据:

 点击批量添加:

 不符合规则的未添加:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189274.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IronPDF 2023.1 for Java Crack

关于 IronPDF for Java 在 Java 8、Kotlin 和 Scala 项目中创建、编辑和提取 PDF 内容。 IronPDF for Java&#xff08;作为 IronPDF for .NET 的一部分提供&#xff09;是一个 Java PDF 库&#xff0c;专为在 Windows、Linux 或云平台上运行的 Java 8、Kotlin 和 Scala 而设计…

2023-01-29 学习笔记:常见28种数据分析模型

2023-01-29 学习笔记&#xff1a;常见28种数据分析模型 知乎上的一篇文章&#xff0c;虽然之前对深度学习相关模型有所了解&#xff0c;但通过这篇文章了解了更多模型的应用场景&#xff0c;同时也知道了日常一共有多少种实用模型。 Excel/Python/sql/PowerBI/Pyecharts这些只是…

YOLOV3中卷积层,池化层,yolo层理解

前言&#xff1a;YOLOV3学习笔记&#xff0c;记录对卷积层&#xff0c;池化层&#xff0c;yolo层的理解&#xff0c;阐述深度学习中卷积核&#xff0c;通道数相关名词的含义。yolov3-tiny网络如下&#xff1a;卷积层0层为卷积层&#xff0c;其中filters16&#xff0c;表示的卷积…

css如何给div添加一个条纹背景,在背景上画一条有宽度的斜线

如图&#xff0c;想要实现div的背景上有一条深色的斜线。 这里主要使用的是css里的线性渐变属性。 先看一下网上示例及效果&#xff1a; 示例一 <body><div class"patterns pt1"></div><div class"patterns pt2"></div>…

Python - 实现logging根据日志级别输出不同颜色

文章目录一、完整代码二、代码解释三、附&#xff1a;自定义颜色对应代码前段时间因为工作需要脚本打印不同颜色的日志。查找了网上的一些方法&#xff0c;大部分都需要再安装第三方模块。后来选择采用比较简易的办法&#xff0c;类似于print()函数自定义内容颜色这种方式的缺陷…

抽烟行为监测识别系统 yolov5

抽烟行为监测识别系统通过pythonyolov5网络深度学习技术&#xff0c;对画面中人员抽烟行为进行主动识别检测。在介绍Yolo算法之前&#xff0c;首先先介绍一下滑动窗口技术&#xff0c;这对我们理解Yolo算法是有帮助的。采用滑动窗口的目标检测算法思路非常简单&#xff0c;它将…

C# AForge的简单使用

AForge.NET专为计算机视觉和人工智能应用而设计&#xff0c;这种C#框架适用于图像处理、神经网络、遗传算法、模糊逻辑、机器学习和机器人等。 该库是一个开源项目&#xff0c;包括&#xff1a; AForge.Imaging —— 一些日常的图像处理和过滤器 AForge.Vision —— 计算机视…

【MySQL】MySQL高手是如何练成的?

MySQL什么是MySQL呢&#xff1f;怎样练成MySQL高手&#xff1f;在Linux安装MySQL问题处理Mysql 的用户管理什么是MySQL呢&#xff1f; Mysql 是开源的&#xff0c;可以定制的&#xff0c;采用了 GPL 协议&#xff0c;可以根据业务需要修改源码来开发自己的 Mysql 系统。 MySQL…

彻底弄懂图片懒加载及底层实现原理

我们都知道图片懒加载是前端性能优化比较常见的一个手段&#xff0c;那么&#xff0c;你真的了解图片懒加载吗&#xff0c;本文将带你从简单到复杂一步一步彻底弄懂其底层实现原理。试想一下&#xff0c;假设用户在访问我们的某个页面时&#xff0c;一开始就加载页面的全部图片…

Vue中组件通信-$attrs与$listeners

组件通信-$attrs与$listeners1.$attrs父子组件通信的一种$attrs与$listeners ---- 父子组件通信$attrs&#xff1a;组件实例的属性&#xff0c;可以获取到父亲传递的props数据&#xff08;前提子组件没有通过props接受&#xff09;$listeners&#xff1a;组件实例的属性&#x…

【AAAI2023】Ultra-High-Definition Low-Light Image Enhancement

【AAAI2023】Ultra-High-Definition Low-Light Image Enhancement: A Benchmark and Transformer-Based Method 代码&#xff1a;https://github.com/TaoWangzj/LLFormer 这个论文首先构建了ultra-high definition low-light &#xff08;UHD-LOL&#xff09;数据集&#xff0c…

Revit建模操作:地面拼花效果做法和构件上色

一、Revit中如何快速做出地面拼花效果 一般大厅地面都会采用拼花做装饰&#xff0c;下面给大家推荐一种快速做出拼花效果的方法。 1.在Revit中导入地面铺装的CAD图纸&#xff0c;通过拾取底图的线&#xff0c;配合绘制命令分别建立各个形状的楼板&#xff0c;如图1所示&#xf…

虚拟DOM与render函数

目录 一、虚拟DOM 1、虚拟DOM是什么 2、为什么要使用虚拟DOM &#xff08;1&#xff09;浏览器显示网页的五步过程&#xff1a; &#xff08;2&#xff09;虚拟DOM的优点 3、Diff算法 二、VNode简介 1、VNode是什么 2、VNode的作用 3、VNode的优点 4、VNode如何生成&a…

【FreeRTOS】详细讲解FreeRTOS中消息队列并通过示例讲述其用法

讲解FreeRTOS中消息队列及其用法使用消息队列的原因消息队列函数解析示例遇到的问题使用消息队列的原因 在裸机系统中&#xff0c;两个程序间需要共享某个资源通常使用全局变量来实现&#xff1b;但在含操作系统(下文就拿FreeRTOS举例)的开发中&#xff0c;则使用消息队列完成。…

MonekyRunner

MonekyRunner 文章目录MonekyRunner一、简介二、JDK环境变量三、配置Android SDK环境变量3.1.下载并解压&#xff1a;3.2.环境变量&#xff1a;3.3.查看MonkeyRunner&#xff1a;四、编写Python脚本五、运行脚本一、简介 MonkeyRunner是Android SDK中自带的工具之一&#xff0…

python3:基础语法、及6种基本数据类型、找到字典的下标 index、获取list中指定元素的位置索引

基础语法 源码文件以 UTF-8 编码&#xff0c;所有字符串都是 unicode 字符串 Python 3 中&#xff0c;可以用中文作为变量名&#xff0c;非 ASCII 标识符也是允许的 标识符 第一个字符必须是字母表中字母或下划线 _ 。 标识符的其他的部分由字母、数字和下划线组成。 标识…

Java---微服务---微服务保护Sentinel

微服务保护Sentinel1.初识Sentinel1.1.雪崩问题及解决方案1.1.1.雪崩问题1.1.2.超时处理1.1.3.仓壁模式1.1.4.断路器1.1.5.限流1.1.6.总结1.2.服务保护技术对比1.3.Sentinel介绍和安装1.3.1.初识Sentinel1.3.2.安装Sentinel1.4.微服务整合Sentinel2.流量控制2.1.簇点链路2.1.快…

【自然语言处理】基于sklearn-crfsuite进行命名实体识别

基于sklearn-crfsuite进行命名实体识别0. 条件随机场1. 训练数据2. 特征提取3. 训练一个CRF模型4. 评估5. 超参数优化6. 检查参数空间7. 检查在测试数据上的最优估计器8.检查分类器学到了什么东西9.检查模型权重10. 定制化11.在控制台中进行格式化参考资料本文中&#xff0c;针…

一种前端无源码定制化开发能力专利解读

背景 目前市面上一些web前端工程在打包发布之前都会进行代码混淆加密。代码混淆(Obfuscated code)是将计算机程序的代码&#xff0c;转换成一种功能上等价&#xff0c;但是难于阅读和理解的形式的行为。代码混淆可以用于程序源代码&#xff0c;也可以用于程序编译而成的中间代…

Leetcode刷题Day38-------------------动态规划

Leetcode刷题Day38-------------------动态规划 1. 理论基础 文章链接&#xff1a;https://programmercarl.com/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html视频链接&#xff1a;https://www.bilibili.com/video/BV13Q4y197Wg题目链接&a…