Qt读写ini文件的方法详解(含源码+注释)

 更新时间:2022年10月21日 10:35:27   作者:lw只吃亿点.  
.ini文件是Initialization File的缩写,即初始化文件,下面这篇文章主要给大家介绍了关于Qt读写ini文件(含源码+注释)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

一、示例Ini文件内容

下方为本文所使用的ini文件的内容

[group1]
key1=val1
key2=val2
sameKay=sameVal

[group2]
jian1=zhi1
jian2=zhi2
sameKay=sameZhi

二、Ini文件的写入

ini文件不需要像xml和json一样需要使用QFile打开文件,只需将文件路径及文件格式传入即可(下方代码运行完毕,ini文件则会更新,若文件不存在,会自动创建)

    //创建QSettings对象并指定ini文件路径并将格式设置为ini
    QSettings setting("./iniTest.ini", QSettings::IniFormat);
    //创建第一个分组(创建分组的第一种方法)
    setting.beginGroup("group1");
    //添加第一个分组中的键值对
    setting.setValue("key1", "val1");
    setting.setValue("key2", "val2");
    setting.setValue("sameKay", "sameVal");
    //设置当前分组结束
    setting.endGroup();
    //添加第二个分组以及其键值对(创建分组的第二种方法)
    setting.setValue("group2/jian1", "zhi1");
    setting.setValue("group2/jian2", "zhi2");
    setting.setValue("group2/sameKay", "sameZhi");

三、Ini文件的读取

3.1 第一种读取方式

好处:步骤不那么繁琐,代码简洁

坏处:不能指定读取某一组的内容,必须读取ini文件所有内容

	//创建QSettings对象并指定ini文件路径并将格式设置为ini
    QSettings setting("./iniTest.ini", QSettings::IniFormat);
    //读取ini文件内容的第一种方法
    qDebug() << "第一种读取方法";
    foreach (QString key, setting.allKeys())
    {
        //将当前的键值对打印输出
        qDebug() << key << setting.value(key).toString();
    }

3.2 第二种读取方式

好处:能指定读取某一组的内容

坏处:步骤相较第一种方式更加繁琐

	//创建QSettings对象并指定ini文件路径并将格式设置为ini
    QSettings setting("./iniTest.ini", QSettings::IniFormat);
	qDebug() << "第二种读取方法";
    //获取ini文件中所有的组
    QStringList groupList = setting.childGroups();
    //指定读取某组的数据
    setting.beginGroup(groupList[1]);
    //遍历该组的键
    foreach (QString key, setting.childKeys())
    {
        //将当前的键值对打印输出
        qDebug() << key << setting.value(key).toString();
    }

3.3 读取结果示例

下方为两种读取方法输出示例

补充:获取所有节点和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() <<key << " : "<< value << endl;
    }
 
    fileSetting->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() <<key << " : "<< value << endl;
        }
    }
    fileSetting->endGroup();   // 结束掉Group

相关文章

总结

到此这篇关于Qt读写ini文件(含源码+注释)的文章就介绍到这了,更多相关Qt读写ini文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • C/C++ 编译器优化介绍

    C/C++ 编译器优化介绍

    这篇文章主要涉及了C/C++ 编译器优化的简单介绍,具有一定参考价值。如有不对之处,欢迎指出。
    2017-09-09
  • C++设计模式之建造者模式(Builder)

    C++设计模式之建造者模式(Builder)

    这篇文章主要介绍了C++设计模式之建造者模式Builder的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • C语言中形参和实参详解及实例代码

    C语言中形参和实参详解及实例代码

    这篇文章主要介绍了C语言中形参和实参详解及实例代码的相关资料,需要的朋友可以参考下
    2017-05-05
  • C++指针运算符(&和*)的实现

    C++指针运算符(&和*)的实现

    C++ 提供了两种指针运算符,一种是取地址运算符 &,一种是间接寻址运算符 *,本文就详细的介绍一下这两种运算符的使用,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • Windows下CMake的下载与安装过程

    Windows下CMake的下载与安装过程

    CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程),这篇文章主要介绍了Windows下CMake的下载与安装,需要的朋友可以参考下
    2022-02-02
  • QT圆形图像剪切功能实现

    QT圆形图像剪切功能实现

    这篇文章主要介绍了QT圆形图像剪切,实现代码包括剪切代码,完整QML源码,C++代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • c文件汇编后函数参数传递的不同之处

    c文件汇编后函数参数传递的不同之处

    在w7 32位系统下把c文件汇编后,确实与mac后的差异很大。可不仅仅是寄存器eax与rax的区别。我想说的是函数参数传递的不同
    2013-11-11
  • Matlab实现绘制高阶版本韦恩图(upset图)

    Matlab实现绘制高阶版本韦恩图(upset图)

    韦恩图随着阶数升高会越来越复杂,当阶数达到7或者以上时几乎没办法绘制,但是使用upset图却可以比较轻易的绘制。本文就来用Matlab实现绘制upset图,需要的可以参考一下
    2023-01-01
  • C语言详细讲解注释符号的使用

    C语言详细讲解注释符号的使用

    C语言的注释符是以“/*”开头并以“*/”结尾的串。在“/*”和“*/”之间的即为注释。程序编译时,不对注释作任何处理。注释可出现在程序中的任何位置。注释用来向用户提示或解释程序的意义。在调试程序中对暂不使用的语句也可用注释符括起来,使翻译跳过不作处理
    2022-04-04
  • C语言实现清空指定文件夹中所有文件的方法

    C语言实现清空指定文件夹中所有文件的方法

    这篇文章主要介绍了C语言实现清空指定文件夹中所有文件的方法,实例分析了C语言实现文件删除的相关技巧,需要的朋友可以参考下
    2015-06-06

最新评论