设有一个用户类 :User 属性假设只有userName、userPwd
class User : public QWidget
{
Q_OBJECT
public:
explicit User(QWidget *parent = 0);
~User();
User(QString userName,QString userPwd);
//方便使用,先放在公有区
QString userName;//账号
QString userPwd;//密码
signals:
public slots:
};
创建一个Data类,用于用户数据从文件读取写入。
class Data : public QWidget
{
Q_OBJECT
public:
static QList<User *> userList;//定义一条用户链表存放所有用户
static void User_read();//用户读取
static void User_write(User *newUser);//用户写入
static void User_update();//用户信息更新
signals:
public slots:
};
使用QFile读取文件内容(QFile和QTextStream结合使用,常用于系统用户初始化以及用户登录)
void Data::User_read()
{
QFile file("data/user.txt");//"data/user.txt"为用户文件的路径
file.open(QIODevice::ReadWrite | QIODevice::Text);//文件不存在会自动创建
QString data;
QStringList user_data;
//判断文件是否打开成功
if(file.isOpen())
{
if(file.size() != 0)//文件有数据
{
QTextStream in(&file);
while(!in.atEnd())//一行一行一直读,直至读取失败
{
data=in.readLine();//读取一行存到data里
user_data=data.split(" ");//将data里的数据以空格作为分隔符存到user_data
User *newUser=new User(user_data.at(0),user_data.at(1));
Data::userList.push_back(newUser);//读取数据存到用户链表中
user_data.clear();//清空,便于存放下一行数据
}
file.close();
}
else //文件没有内容,向文件写入初始数据
{
QTextStream in(&file);
in<<"admin"<<" "<<"123456"<<endl;//用空格作为分隔符,endl为换行
in<<"lihua"<<" "<<"123456"<<endl;
User *newUser1=new User("admin","123456");
User *newUser2=new User("lihua","123456");
Data::userList.push_back(newUser1);
Data::userList.push_back(newUser2);
file.close();//关闭文件
}
}
else//文件打开失败
{
exit (0);
}
}
使用QFile向文件写入内容(常用于新用户注册)
void Data::User_write(User *newUser)
{
QFile file("data/user.txt");
file.open(QIODevice::Append | QIODevice::Text);//追加的方式打开文件,原始数据不会清空
if(file.isOpen())//文件打开成功
{
QTextStream in(&file);
in<<newUser->userName<<" "<<newUser->userPwd<<endl;//向文件写入数据
Data::userList.push_back(newUser);
file.close();
}
else //文件打开失败
{
exit (0);
}
}
使用QFile向文件更新内容(常用于用户修改个人信息,暂时只有重刷文件的方法,单独修改某一行的数据还不会)
void Data::User_update()
{
int i=0;
QFile file("data/user.txt");
file.open(QIODevice::WriteOnly| QIODevice::Text);//重刷文件,原文件数据被覆盖,重新写入一份
if(file.isOpen())
{
QTextStream in(&file);
//将链表的数据全部重新写入文件
for(i=0;i<Data::userList.size();i++)
{
in<<Data::userList.at(i)->userName<<" "<<Data::userList.at(i)->userPwd<<endl;//向文件写入数据
}
file.close();
}
else//文件打开失败
{
exit (0);
}
}
所需要的头文件大致为以下几个
#include <QFile>
#include <QList>
#include <QString>
#include <QTextStream>
#include <QStringList>