1.首先要了解QTextEdit的遍历方式
在下面的文章中已经介绍,这里就不在介绍了:
富文本处理(QTextEdit)_旷工锁的博客-CSDN博客_qtextedit 富文本
基本步骤为:
- 创建一个QTextEdit
- 使用QTextDocument来获取QTextEdit中的记录
- 通过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添加验证器
输入以下数据:
点击批量添加:
不符合规则的未添加: