qt ini 文件读写以及 节点的遍历

qt 的配置文件一般都用ini文件, 在此我记录下使用方法.

ini 组成简介:

INI文件由节点、键、值组成。 

如下面代码中 :    fileSetting->setValue("/fileSave/savePath",filePath);   

节点 : fileSave      键 :  savePath    值:  filePath

使用说明: 

1. 添加 INI_File.cpp 文件, 无需继承

2. 添加头文件

#include 
#include 
#include 

3. 创建 ini 文件

INI_File::INI_File()
{
    fileName = QCoreApplication::applicationDirPath() + "/Cofig.ini";  // 获取当前文件路径
    fileSetting = new QSettings(fileName,QSettings::IniFormat);  // 如果文件没有,创建文件
}
3. 读取和保存
void INI_File::setPath(QString filePath)
{
    fileSetting->setValue("/fileSave/savePath",filePath);  // 保存savePath 的值
}

QString INI_File::getPath()
{
    return fileSetting->value("/fileSave/savePath").toString(); // 读取 savePath 的值
}

程序调用 :


// 读取配置文件中的值
QString str = INI_File().getPath();   // 读取保存的值


// 设置配置文件中的值
 QString file_path = QFileDialog::getExistingDirectory(this, "请选择文件路径...", "./");  // 获取文件夹路径
 if(!file_path.isEmpty())
 {
        INI_File().setPath(file_path);  // 保存选择的路径
 }

 

获取所有节点和key以及节点的遍历

添加一些数据

void INI_File::setPath(QString filePath)
{
    fileSetting->setValue("/fileSave/savePath",filePath);  // 保存savePath 的值

    // 测试使用
    fileSetting->setValue("/ip/first", "192.168.0.1");
    fileSetting->setValue("ip/second", "127.0.0.1");
    fileSetting->setValue("port/open", "2222");
}

1. 获取整个 ini 文件所有的 key  (  allKeys  )

 // 获取所有节点和key
   QStringList str = fileSetting->allKeys();
    qDebug() <<"allKeys : " << str << endl;

    foreach(QString key,str)
    {
        qDebug() << fileSetting->value(key).toString()<< endl;// 读取 savePath 的值
    }

打印结果

allKeys : ("fileSave/savePath", "ip/first", "ip/second", "port/open")

"fileSave/savePath" : "C:/Users/Administrator/Desktop"

"ip/first" : "192.168.0.1"

"ip/second" : "127.0.0.1"

"port/open" : "2222"

2. 获取所有节点 (  childGroups )

 // 获取所有节点
    QStringList str1 = fileSetting->childGroups();
    qDebug() <<"childGroups : " << str1 << endl;

打印结果为 : childGroups : ("fileSave", "ip", "port")

3. 遍历一个节点 "ip" 下所有 key的值    (   beginGroup   +    allKeys  +  endGroup )

注意

1)   代码中直接使用了 "key" (  value( key ).toString()  )

2)   beginGroup 使用完后, 一定要用  endGroup() , 不然后面 settings 将无法使用

    // 获取一个节点下的key值
    fileSetting->beginGroup("ip");    // 设置查找节点
    QStringList str2 = fileSetting->allKeys();    // 获取所有的key
    qDebug() <<"ip --  allKeys : " << str2 << endl;

    foreach(QString key,str2)
    {
       QString value  = fileSetting->value(key).toString();  // 直接用 key 获取数据
       qDebug() <endGroup();   // 结束掉Group

打印结果如下:

ip -- allKeys : ("first", "second")

"first" : "192.168.0.1"

"second" : "127.0.0.1"

4. 删除操作: 

  • contains() 判断一个指定的键是否存在
  • remove() 删除相关的键
  • clear() 删除所有键
    fileSetting->beginGroup("ip");    // 设置查找节点
    QStringList str2 = fileSetting->allKeys();    // 获取所有的key
    qDebug() <<"ip --  allKeys : " << str2 << endl;

    foreach(QString key,str2)
    {
        if (fileSetting->contains(key))    // 判断"键"是否存在
             fileSetting->remove(key);      // 删除此键
        else
        {
            QString value  = fileSetting->value(key).toString();  // 直接用 key 获取数据
            qDebug() <endGroup();   // 结束掉Group

 

 

你可能感兴趣的:(qt)