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

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添加验证器

输入以下数据:

 点击批量添加:

 不符合规则的未添加:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值