Qt学习之QFile的使用(Qt文件读取写入)

本文介绍了如何使用C++创建User和Data类,通过QFile处理用户数据的读写。User类包含用户账号和密码,Data类则维护用户链表并提供读取(从'user.txt')、写入新用户和更新用户信息的功能。核心涉及QFile的使用及其与QTextStream的配合。
摘要由CSDN通过智能技术生成

设有一个用户类 :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>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

似末

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值