QT中文件的读写(注册与登录)

注册按键功能:

思路:

  1. 判断输入的内容有无空格
  2. 判断是否重名(打开文件,从中查找)
  3. 写入文件
    需要包含的头文件
#include <QMessageBox>
#include <QDebug>
#include <QByteArray>
#include <QString>

connect(ui->pushButton,&QPushButton::clicked,[=](){
        QString name,pass,pass2;
        name = ui->namelineEdit->text();
        pass = ui->passwordlineEdit->text();
        pass2 = ui->passwordlineEdit2->text();
        //首先判断三个输入框有没有没为空
        if((name != "")&&(pass != "")&&(pass2 != "") )
        {
           if(pass == pass2)
           {
              qDebug()<<"格式正确";
              FILE * fp;            //定义一个文件流指针
              if((fp = fopen("D:/qt_code/7.22/GUI/date.txt","r+"))==NULL)
              {
                  perror("fail to open!");
              }
              char temp[300];
              while(fgets(temp,300,fp) != NULL)
              {
                   qDebug()<<"正在检查是否重名";
                   QString dtn = QString(strtok(temp,":"));
                   if(dtn == name)
                   {
                       QMessageBox::critical(this,"错误","该用户名已经存在");
                       return ;
                   }
              }
              fclose(fp);


              FILE * fp1;
              if((fp1 = fopen("D:/qt_code/7.22/GUI/date.txt","a+"))==NULL)
              {
                  perror("fail to fopen");
              }
              else
              {
                   QByteArray qtname = ui->namelineEdit->text().toLatin1();
                   QByteArray qtpass = ui->passwordlineEdit->text().toLatin1();
                   char * tn = qtname.data();
                   char * tp = qtpass.data();
                   fputs(tn,fp);
                   fputs(":",fp);
                   fputs(tp,fp);
                   fputs("\n",fp);
                   qDebug()<<" 写入文件成功";
                   QMessageBox::information(this,"恭喜","注册成功!");

              }
              fclose(fp1);
           }
           else
           {
               QMessageBox::critical(this,"错误","两次输入的密码不一致!");
           }
        }
        else
        {
            QMessageBox::critical(this,"错误","密码或账号为空!");
        }
    });

登录按键实现:

所需头文件:

#include <QString>
#include <QDebug>
#include <QMessageBox>
void LoginWindow::on_pushButton_clicked()
{
    static int count = 0;
    QString name = ui->lineEdit->text();
    QString pass = ui->lineEdit_2->text();

    if((name!=NULL) && (pass!=NULL))
    {
        FILE * fp;            //定义一个文件流指针
        if((fp = fopen("D:/qt_code/7.22/GUI/date.txt","r+"))==NULL)
        {
            perror("fail to open!");
        }
        char temp[300];
        while(fgets(temp,300,fp) != NULL)
        {
             qDebug()<<"正在检查是否是否有匹配的id和密码";
             QString dtn = QString(strtok(temp,":"));
             QString dtp = QString(strtok(NULL,"\n"));
             qDebug()<<dtn<<"  "<<dtp;
             if((dtn == name ) && (dtp == pass))
             {
                 QMessageBox::information(this,"恭喜","登录成功!");
                 //然后跳转新窗口
                 this->hide();       //子窗口不能够使父窗口隐藏!(需要自定义信号与槽)
                 this->mymainwindow->show();
                 count++;
             }
        }
        if(count == 0)
        {
            QMessageBox::critical(this,"错误!","密码或账号有误!");
        }
        fclose(fp);
    }
    else
    {
        QMessageBox::critical(this,"错误!","密码为空");
    }

}

写入文件,就不用退出之后,内容丢失了。
在qt中写入文件个人觉得需要注意的几个点

  1. 在qt中使用文件,不能直接用string啊,这一句很重要:
    QByteArray qtname = ui->namelineEdit->text().toLatin1();
    从lineEdit上面获取到的是string类型呀,需要转成const char *.在qt中也就是QByteArray转成一个数组,再char * tn = qtname.data();。用一个指针保存数组的首地址,这样最后再放入文件,fputs(tn,fp);
  2. 对文件进行遍历的时候尽量一行一行的遍历,自己要有自己的标志。
 				fputs(tn,fp);
          		fputs(":",fp);
         		fputs(tp,fp);
         		fputs("\n",fp);

比如我的一行,存放的是name:password,然后换行,有了统一的写入方式,读取的时候才方便。

 while(fgets(temp,300,fp) != NULL)
              {
                   qDebug()<<"正在检查是否重名";
                   QString dtn = QString(strtok(temp,":"));
                   if(dtn == name)
                   {
                       QMessageBox::critical(this,"错误","该用户名已经存在");
                       return ;
                   }
              }

然后依次获取一行,找到你的name,一一进行比较,就完事儿了。

3.一个文件使用完毕一定要关闭呀!

自己编写的时候用到了,希望对大家有帮助。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值