QT实现读取ini文件(利用QSettings的beginReadArray和beginWriteArray功能按列表读写节点中的数据)

本机系统配置:ThinkPadT570、Windows10、QT5.12.2(QtCreater4.8.2)
我建立的qt工程名为EditPic,以下代码实现了1.定义Login 结构体,里面放了userName和password两个变量;2.定义一个Login类型的队列logins,并填充5个数据;3.通过beginWriteArray的方式,将logins中的数据写入editpic.ini文件中;4.从editpic.ini文件中读取logins节点的数据;5.将读取到的数据写入editpic2.ini文件中。
具体代码如下:
在mainwindow.cpp的类结构外定义结构体:

struct Login {
    QString userName;
    QString password;
    Login():userName(""),password("")
    {

    }
    Login(QString name,QString pwd):userName(""),password("")
    {
        userName = name;
        password = pwd;
    }
};

在mainwindow.cpp的构造函数中添加如下代码:

//获取ini文件路径
QString     wstrFilePath;
#if defined(Q_OS_LINUX)//区分在linux下还是windows下
    wstrFilePath = qApp->applicationDirPath() + "/../EditPic/editpic.ini" ;//in linux
#else
    wstrFilePath = qApp->applicationDirPath() + "/../../EditPic/editpic.ini" ;//in windows,我的工程名为EditPic,二editpic.ini放在工程源文件目录下
#endif
QSettings *settings=new QSettings(wstrFilePath,QSettings::IniFormat);//用QSetting获取ini文件中的数据
QList<Login> logins;//定义一个Login类型的队列,用来放配置文件中logins节点的数据
logins.push_back(Login("name1","pw1"));
logins.push_back(Login("name2","pw2"));
logins.push_back(Login("name3","pw3"));
logins.push_back(Login("name4","pw4"));
logins.push_back(Login("name5","pw5"));
settings->clear();//清空settings中的数据
settings->beginWriteArray("logins");//通过beginWriteArray的方式将队列logins写进editpic1.ini的logins节点
for (int i = 0; i < logins.size(); ++i) {
    settings->setArrayIndex(i);//标记Array的索引
    settings->setValue("userName", logins.at(i).userName);//添加userName键的值
    settings->setValue("password", logins.at(i).password);//添加password键的值
}
settings->endArray();//结束队列的输入,与settings->beginWriteArray("logins");相对应
//通过beginReadArray的方式将ini文件中的logins节点读取到logins队列中
if(!logins.empty())
{
    logins.clear();
}
int size = settings->beginReadArray("logins");
for (int i = 0; i < size; ++i) {
    settings->setArrayIndex(i);
    Login login;
    login.userName = settings->value("userName").toString();
    login.password = settings->value("password").toString();
    logins.append(login);
}
settings->endArray();
//将从editpic.ini读取到的logins节点的值写到editpic2.ini文件中
wstrFilePath = qApp->applicationDirPath() + "/../../EditPic/editpic2.ini" ;//in windows
QSettings *settings2 = new QSettings(wstrFilePath,QSettings::IniFormat);
settings2->clear();
settings2->beginWriteArray("logins");
for (int i = 0; i < logins.size(); ++i) {
    settings2->setArrayIndex(i);
    settings2->setValue("userName", logins.at(i).userName);
    settings2->setValue("password", logins.at(i).password);
}
settings2->endArray();
settings2->setValue("global/name","editpic2.ini");//通过普通的方式将global节点下name键的值设置为"editpic2.ini"

软件运行后发现工程文件夹中新增了editpic.ini和editpic2.ini文件,截图如下:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GreenHandBruce

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

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

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

打赏作者

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

抵扣说明:

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

余额充值