注册按键功能:
思路:
- 判断输入的内容有无空格
- 判断是否重名(打开文件,从中查找)
- 写入文件
需要包含的头文件
#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中写入文件个人觉得需要注意的几个点
- 在qt中使用文件,不能直接用string啊,这一句很重要:
QByteArray qtname = ui->namelineEdit->text().toLatin1();
从lineEdit上面获取到的是string类型呀,需要转成const char *.在qt中也就是QByteArray转成一个数组,再char * tn = qtname.data();
。用一个指针保存数组的首地址,这样最后再放入文件,fputs(tn,fp);
。 - 对文件进行遍历的时候尽量一行一行的遍历,自己要有自己的标志。
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.一个文件使用完毕一定要关闭呀!
自己编写的时候用到了,希望对大家有帮助。