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

目录
  • 一、示例Ini文件内容
  • 二、Ini文件的写入
  • 三、Ini文件的读取
    • 3.1 第一种读取方式
    • 3.2 第二种读取方式
    • 3.3 读取结果示例
  • 补充:获取所有节点和key以及节点的遍历
  • 相关文章
  • 总结

一、示例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写入Json文件(含源码+注释)
  • Qt读Json文件(含源码+注释)
  • Qt读写XML文件(含源码+注释)

总结

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

(0)

相关推荐

  • QT中如何读写ini配置文件

    如图1所示,我们需要在QT界面中实现手动读取参数存放的位置,那么我们该如何做呢? 方法:读取ini格式的配置文件,实现路径的写入与读取. 第一步:界面构造函数中,初始化一个Config.ini文件 //初始化一个.ini配置文件 //qApp是QT系统自带的,可以直接使用 QString iniFilePath=qApp->applicationDirPath()+"/Config.ini"; //如果不存在Config.ini,便生成一个Config.ini.如果已经存在了,则

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

    目录 一.示例Ini文件内容 二.Ini文件的写入 三.Ini文件的读取 3.1 第一种读取方式 3.2 第二种读取方式 3.3 读取结果示例 补充:获取所有节点和key以及节点的遍历 相关文章 总结 一.示例Ini文件内容 下方为本文所使用的ini文件的内容 [group1] key1=val1 key2=val2 sameKay=sameVal [group2] jian1=zhi1 jian2=zhi2 sameKay=sameZhi 二.Ini文件的写入 ini文件不需要像xml和jso

  • Qt写入Json文件的方法详解(含源码+注释)

    目录 一.示例Json文件内容 二.Json写入会使用的类(介绍写入所使用的类在本文中的作用,个人理解) 三.Json文件的写入 3.1 常规类型的写入 3.2 对象及数组类型的添加 3.3 Json串写入文件 总结 一.示例Json文件内容 下方为本文所使用的Json文件的内容,其中包含字符串.数值.布尔.null.对象.数组等(写入方式在本文第三节) { "array": [ "str", 88, null ], "bool": true,

  • android编程之XML文件解析方法详解(附源码)

    本文实例讲述了android编程之XML文件解析方法.分享给大家供大家参考,具体如下: 在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX.Pull.Dom解析方式.最近做了一个android版的CSDN阅读器,用到了其中的两种(sax,pull),今天对android解析xml的这三种方式进行一次总结. 今天解析的xml示例(channels.xml)如下: <?xml version="1.0" encoding="utf-8

  • C#实现读写CSV文件的方法详解

    目录 CSV文件标准 文件示例 RFC 4180 简化标准 读写CSV文件 使用CsvHelper 使用自定义方法 总结 项目中经常遇到CSV文件的读写需求,其中的难点主要是CSV文件的解析.本文会介绍CsvHelper.TextFieldParser.正则表达式三种解析CSV文件的方法,顺带也会介绍一下CSV文件的写方法. CSV文件标准 在介绍CSV文件的读写方法前,我们需要了解一下CSV文件的格式. 文件示例 一个简单的CSV文件: Test1,Test2,Test3,Test4,Test

  • javascript ES6中set集合、map集合使用方法详解与源码实例

    set与map理解 ES6中新增,set集合和map集合就是一种数据的存储结构(在ES6之前数据存储结构只有array,object),不同的场景使用不同的集合去存储数据 set集合 Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用. set集合语法: //创建一个set集合,传参为一个可迭代的对象 const s1 = new Set(iterable); API 名称 类型 简介 Set.add() 原型方法 添加数据 Set.has() 原型方法 判断是否存在一个数据 S

  • Java SpringBoot自动装配原理详解及源码注释

    目录 一.pom.xml文件 1.父依赖 2.启动器: 二.主程序: 剖析源码注解: 三.结论: 一.pom.xml文件 1.父依赖 主要是依赖一个父项目,管理项目的资源过滤以及插件! 资源过滤已经配置好了,无需再自己配置 在pom.xml中有个父依赖:spring-boot-dependencies是SpringBoot的版本控制中心! 因为有这些版本仓库,我们在写或者引入一些springboot依赖的时候,不需要指定版本! 2.启动器: 启动器也就是Springboot的启动场景; 比如sp

  • Android编程之ICS式下拉菜单PopupWindow实现方法详解(附源码下载)

    本文实例讲述了Android编程之ICS式下拉菜单PopupWindow实现方法.分享给大家供大家参考,具体如下: 运行效果截图如下: 右边这个就是下拉菜单啦,看见有的地方叫他 ICS式下拉菜单,哎哟,不错哦! 下面先讲一下实现原理: 这种菜单实际上就是一个弹出式的菜单,于是我们想到android PopupWindow 类,给他设置一个view 在弹出来不就OK了吗. PopupWindow 的用法也很简单 主要方法: 步骤1.new 一个实例出来,我们使用这个构造方法即可, 复制代码 代码如

  • 使用C/C++读写.mat文件的方法详解

    目录 一.创建工程并添加测试代码 二.修改CmakeLists文件 三.添加环境变量 四.令人头秃的错误 五.运行结果 总结 最近需要使用C++来处理matlab生成的数据, 参考了网上一些博客,不过他们都是使用的VS,我比较喜欢使用Clion, 在配置的过程中也遇到了一些坑,记录一下. 一.创建工程并添加测试代码 创建工程就不说了,注意一下我使用的编译工具链是MinGW.测试代码参考的matlab官方的程序:读取用 C/C++ 编写的 MAT 文件 - MATLAB & Simulink -

  • C++ OpenCV读写XML或YAML文件的方法详解

    目录 前言 1.如何使用 1.1第一步:XML.YAML文件的打开 1.2 第二步:进行文件读写操作 1.3 第三步:vector(array)和map的输入和输出 1.4 第四步:文件关闭 2.代码展示 2.1 写文件 2.2 读文件 2.3 完整的示例代码 前言 本节我们将认识XML和YAML这两种文件类型. 所谓XML,即eXtensible Markup Language,翻译成中文为“可扩展标识语言”.首先,XML是一种元标记语言.所谓元标记,就是开发者可以根据自身需要定义自己的标记,

  • Python Pandas读写txt和csv文件的方法详解

    目录 一.文本文件 1. read_csv() 2. to_csv() 一.文本文件 文本文件,主要包括csv和txt两种等,相应接口为read_csv()和to_csv(),分别用于读写数据 1. read_csv() 格式代码: pandas.read_csv(filepath_or_buffer, sep=', ', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False

随机推荐