如何把QList中结构体数据批量存入到QSettings配置文件中,遍历读取?
qt中的ini配置文件是由节点、键、值组成的,不设置节点的话就默认没有
首先我们创建出一个包含节点和键值对的配置文件出来:
//方式一QSettings setting("test.ini",QSettings::IniFormat);setting.setValue("animal/snake", 58);//说明:“节点/键”,值setting.setValue("animal/rft", 68);setting.setValue("ty/snake", 58);setting.setValue("ty/yu", 58);// 方式二setting.beginGroup("animal");setting.setValue("snake", 58);setting.setValue("rft", 68);setting.endGroup();setting.beginGroup("ty");setting.setValue("snake", 58);setting.setValue("yu", 68);setting.endGroup();// 方式三QSettings *setting= new QSettings("ini文件的路径", QSettings::IniFormat);setting->beginGroup("srudent");// 设置当前节名,代表以下的操作都是在这个节中setting->setValue( "name", "lili");//设置键值对setting->endGroup();// 结束当前节的操作//取值时setting.value(节点/键);/***以上都是包含节点的,如果不需要设置节点只是单纯的想在配置文件中存几个数据时***/QSettings setting("test.ini",QSettings::IniFormat);setting.setValue("键名", 值);setting.setValue("键名", 值);//取的时候,直接setting.value("键");即可

接下来我们怎么遍历ini文件得到所有节点下的键值对呢?
QStringList allKeys = setting.allKeys();for(int i=0;i
遍历获得所有的节点
QStringList allGroup = setting.childGroups();for(int i=0;i
![]()
怎么找到某个节点下的键值对?
setting.beginGroup("ty");//设置查找的节点名QStringList allKeys = setting.allKeys();for(int i=0;i
![]()
☋ 拓展:感觉下面这个方法超有用
怎么把一个存储结构体内容的容器中的值保存到ini文件中,取出的时候又可以遍历取出?
struct Login
{QString userName;QString password;
};
写入ini文件:
QSettings settings("confif.ini",QSettings::IniFormat); QList logins;Login login1={"op","ikl"};Login login2={"dwed","1212"};logins.append(login1);logins.append(login2);settings.beginWriteArray("logins");for (int i = 0; i < logins.size(); ++i){settings.setArrayIndex(i);settings.setValue("userName", logins.at(i).userName);settings.setValue("password", logins.at(i).password);}settings.endArray();
写入:

从ini文件遍历取出:
QSettings settings("confif.ini",QSettings::IniFormat);QList logins;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();for(int i=0;i

注:上面用数组方式遍历ini文件的方法有一个缺点,就比如我们删掉一条配置文件里的数据时,它的size并不会自动减1。这样就很烦,如果有做文件里数据删除的操作的话,得隔断时间更新一下,就是判断一下该键值是否为空(这一点在你查找取出某个数据的时候也判断一下比较保险),然后全部重新取出来再重新存进去。
其他:判断包含和删除
setting.contains(key);setting.remove(key);//key是键//如果要删除节点下的所有键值对,则是setting.remove("");
补充:Qt的ini配置文件默认不支持直接读写中文,需要手动设置下编码格式才行,强烈建议统一用utf-8编码,包括代码文件。
在读和写得时候加上setting.setIniCodec("utf-8");即可。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
