QT 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();
接下来我们怎么遍历ini文件得到所有节点下的键值对呢?
QStringList allKeys = setting.allKeys(); for(int i=0;i<allKeys.size();i++) { QString key = allKeys.value(i); //"ty/snake" "ty/yu" qDebug() << allKeys.value(i) <<setting.value(key).toInt(); }
遍历获得所有的节点
QStringList allGroup = setting.childGroups(); for(int i=0;i<allGroup.size();i++) { qDebug() << allGroup.value(i); }
怎么找到某个节点下的键值对
setting.beginGroup("ty");//设置查找的节点名 QStringList allKeys = setting.allKeys(); for(int i=0;i<allKeys.size();i++) { QString key = allKeys.value(i); qDebug() << allKeys.value(i) <<setting.value(key).toInt(); } setting.endGroup();
拓展:感觉下面这个方法超有用
怎么把一个存储结构体内容的容器中的值保存到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<logins.size();i++) { qDebug() << logins.value(i).userName << logins.value(i).password; }
其他:判断包含和删除
setting.contains(key); setting.remove(key);//key是键 //如果要删除节点下的所有键值对,则是 setting.remove("");