> 文档中心 > QT QSettings遍历所有的节点下的键值对

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("");