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

2023-11-09

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

ini 组成简介:

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

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

节点 : fileSave      键 :  savePath    值:  filePath

使用说明: 

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

2. 添加头文件

#include <QString>
#include <QCoreApplication>
#include <QSettings>

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

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 无法在带有 QSortFilterProxyModel 的 QTreeView 的点击信号中使用 itemFromIndex

    我有一个 QTreeView 在视图和 QStandardItemModel 之间有一个 QSortFilterProxyModel 来对树进行排序 然后我想通过 clicked 信号对视图中的点击进行操作 模型 视图的设置类似于 mymo
  • 在高 dpi Windows 平台上自动重新缩放应用程序?

    我正在编写一个需要在高 dpi Windows 192dpi 而不是 96dpi 上运行的 Qt 应用程序 不幸的是 Qt 框架尚不支持高 dpi 至少在 Windows 上 因此我的应用程序及其所有元素看起来只有应有尺寸的一半 有没有办法
  • 安装J语言的JQt IDE,出现错误

    我一直按照这里的说明进行操作 http code jsoftware com wiki System Installation Linux http code jsoftware com wiki System Installation L
  • Qt 安装程序框架 - 如何在卸载时仅删除某些文件和文件夹

    我使用 Qt 安装程序框架 如何确保在卸载时仅删除某些文件或文件夹 而不是像当前那样删除安装文件夹中的所有文件 先感谢您 您可以覆盖默认行为component createOperations对于卸载程序 然后使用手动指定每个卸载路径com
  • 将 QByteArray 从大端转换为小端

    我想我在这里有点不知所措 我尝试了这么简单的事情 我不敢相信没有任何内置的 Qt 使用 Qt 5 6 2 我尝试将 QByteArray 内的数据从大端转换为小端 总是从相同的测试 QByteArray 开始 就像这样 QByteArray
  • 如何从 matlab 调用 Qtproject?

    我在 matlab 中有一个函数可以写入一个 file txt 我在 qt 项目中使用它 So 当我使用 unix 获取要运行的 qt 编译可执行文件时 我有一个 Matlab 文件 但出现错误 代码 unix home matt Desk
  • 如何使用 ClangCodeModel 插件在 QtCreator 中设置 C++ 标准?

    抱歉 如果这是一个愚蠢的问题 但我已经尝试了几乎所有的方法 现在正在用头撞墙 问题是 带有 Clang 代码模型插件的 QtCreator 4 8 0 beta for Windows 解析我的项目 为 C 98 而实际上它是 C 17 但
  • QWinTaskbarProgress 不会显示

    我使用的是windows7和Qt5 3 0 我在 MainWindow 的构造函数中添加了以下内容 但任务栏上没有显示任何内容 我错过了什么 QWinTaskbarProgress pTaskbarProgress new QWinTask
  • QChart 对大数据集无响应

    我的这段代码适用于高达 1000 的数据大小 现在我用 65536 个点对其进行了测试 series new QLineSeries QList
  • Qt 编译器标志顺序

    我的目标是消除某些类型的编译器警告 我发现可以通过在 pro 文件中添加编译器标志来做到这一点 QMAKE CXXFLAGS Wno unused variable Wno reorder 问题是它们被添加在 Qt 构建系统生成的标志之前
  • QPainterPath::arcTo 上的角度如何解释?

    我正在开发图形编辑器的功能 在其中编辑弧线 当形状是椭圆形时 QPainterPath arcTo 的行为并不像我预期的那样 当它是一个圆圈时 它会按预期工作 下面的两张图片显示了结果 在第一种情况下 我创建了一个圆 然后将其转换为初始起始
  • 从 Qt 更改屏幕分辨率?

    我想更改屏幕分辨率 然后使用一个 ActiveX 控件 Flash 播放器 进入全屏 显然 仅适用于 Windows 的解决方案就可以了 有 Qt api 吗 还是我需要深入研究 winapi 如果是这样 我该在哪里查找 关键字 谢谢您的帮
  • Android 版 Qt 和 BoringSSL

    我正在开发一个基于 Qt 的 Android 应用程序 它使用 QSslSocket 下载数据 由于 Android 从 OpenSSL 转向 BoringSSL 因为依赖 OpenSSL 库的 Marshmallow Qt 程序在 And
  • 在Qt中,如何正确实现委托?

    我遵循模型 视图 控制器范例 我很确定模型和视图是正确的 但我认为我的代表做错了一些事情 一切都 有效 除了第一次单击控件只是 点亮控件 而第二次单击与之交互之外 这是代表通常的实施方式吗 我的实现需要大量的构造和销毁 由scoped pt
  • cmake 找不到 Qt4

    由于4 8 0已经发布 我重新安装了Qt 现在我也想使用cmake 为了使 cmake 工作 我记得必须添加 mingw bin 文件夹 QtSDK Desktop Qt 4 7 3 到Qt4 7 3中的PATH 所以我猜测在中会有一个类似
  • C++ QT libXL 错误:“启动期间程序退出,代码为 0xc0000135”

    我正在尝试编写一个使用 libXL 的 QT 应用程序 但是当我尝试编译时 我收到一个弹出框 显示 During Startup program exited with code 0xc0000135 我已经准确地找出了哪一行导致了问题 它
  • 为什么anchors.centerIn不适用于Column元素?

    我有这段 QML 代码 Column spacing units gu 2 anchors fill parent centerIn parent Row spacing units gu 4 Row spacing units gu 4
  • 在信号/槽处理期间删除 QObject

    我知道从槽处理中删除 QObject 可能会使应用程序崩溃 因为它可能有其他排队的事件 因此 我将使用 obj gt deleteLater 而不是使用 delete obj 据我所知 obj 等待处理所有排队的事件 然后 删除 obj Q
  • 在 QtCreator 中调试时如何查看 qDebug 消息

    我正在从 Eclipse CDT 带有 Qt 集成插件 过渡到 QtCreator 2 0 但仍有一件事困扰着我 QtCreator 当我在 QtCreator 中调试时 我在Application output tab直到我停止正在调试的
  • 当给定 100k 项时,QListView 需要很长时间才能更新

    我在读取文件时遇到问题 具体是我想制作一本小字典 在我需要阅读的文件中有这样的内容 a Ph P6 a snsr CA a b c fb Dj a b c book i BS A except B gate oOPa y a font kQ

随机推荐

  • 微信小程序背景图片设置问题

    我们都知道 用css给网页设置背景图片 可以导入网络图片和本地图片 1 网络图片 元素定位 background image url https timgsa baidu com timg image quality 80 size b99
  • CUDA error: CUBLAS_STATUS_EXECUTION_FAILED when calling ‘cublasSgemm’

    运行transformer模型是报错如题 1 减小batch size 原因是调用cublas函数时会生成句柄 占用一定的内存 确保剩余内存够使用 2 gpu驱动版本和cuda torch版本的匹配问题 低版本的gpu驱动 尝试换成11 0
  • 怎么上传本地项目或文件到SVN服务器

    实验需要将本地的文件上传到SVN的doc文件夹下 在桌面右击 TortoiseSVN gt Repo brower gt 输入你的仓库的url gt 输入用户姓名和密码 即可访问到svn 右键点击Add File即可添加要上传的文件 如下图
  • c++文件输入与输出

    基于流的文件IO 头文件 ofstream 写文件 ifstream 读文件 fstream 读写文件 using namespace std 打开文件 std ifstream fin xxx txt std ifstream fin f
  • 几个更优雅、更高效 Pythonic 代码写法!

    本文分享几个鲜为人知的 Pythonic 技巧 这些技巧非常有用 但并不广为人知 通过学习和使用这些技巧 可以帮你节省时间和精力 并使你的代码更加优雅和高效 1 三元运算符 三元运算符是 if else 语句的简写 语法是value if
  • Flink自定义HBaseSink类

    文章目录 HBaseCell类 HBaseSink类 HBaseCell类 package com vic flink entity import lombok Data import java util HashMap Data publ
  • cookie原理详解及单点登录原理

    cookie一般是用来客户端存储信息的 用它可以进行用户信息的检验 实际案例 单点登录 cookie的原理 第一次访问网站的时候 浏览器发出请求 服务器响应请求后 会将cookie放入到响应请求中 通过Set Cookie字段 在浏览器第二
  • awk脚本

    编写awk脚本 1 从 Hello World 开始 we create a file named test that contains a single line This example shows a script that cont
  • Springboot整合MyBatisPlus框架操作MySQL

    1 MyBatis Plus概述 MyBatis Plus opens new window 简称 MP 是一个 MyBatis opens new window 的增强工具 在 MyBatis 的基础上只做增强不做改变 为简化开发 提高效
  • Synchronized实现原理

    查看带有Synchronized语句块的class文件可以看到在同步代码块的起始位置插入了moniterenter指令 在同步代码块结束的位置插入了monitorexit指令 JVM需要保证每一个monitorenter都有一个monito
  • SQL Server与Java的类型对应,Char用setString设值

    表列出了基本 SQL Server JDBC 和 Java 编程语言数据类型之间的默认映射 SQL Server 类型 JDBC 类型 java sql Types Java 语言类型 bigint BIGINT long timestam
  • Java实现桶排序

    桶排序 使用额外空间 以空间换时间思想 因此时间复杂度为O n m 1 1 基本思想 桶排序是所有排序算法中最快 也是最简单的排序算法 基本思想是在知道所有待排元素的范围后 准备和这个范围同样数量的桶 并将元素放在对应的桶中 如待排元素为
  • java焦点图_基于JavaScript实现焦点图轮播效果

    不管是高校的网站还是电商的页面 焦点图的切换和轮播应该是一项不可或缺的应用 今天把焦点图轮播制作的技术要点做下笔记 以供日后查看 一 结构层 HTML 焦点图的HTML结构很简单 就是一个父容器 id box 包含三个子容器 分别存放图片
  • lua:table转json字符串

    table转字符串 function table2JsonString objTable local jsonString jsonString local t type objTable if t number then jsonStri
  • harbor修改配置文件后重启

    docker compose down prepare docker compose up d 转载于 https www cnblogs com wang lei p 11540792 html
  • 自从AndroidStudio更新到2.2,就有了CMake和传统JNI两种开发NDK的方法,主要就是在目录结构和build.gradle上的区别,下面我们将分别介绍目录区别和build.gr

    http blog csdn net u012527560 article details 51752070 自从AndroidStudio更新到2 2 就有了CMake和传统JNI两种开发NDK的方法 主要就是在目录结构和build gr
  • 使用JSON

    JSON Javascript Object Notion Javascript对象表示法 JSON是Javascript对象表示法的一个子集 它必然使用了Javascrip对象表示法中的所有相同的规则和基础类型 JSON可以表示对象的实例
  • 实战wxPython:044 - 高级控件之HtmlWindow

    本文介绍如何在Python的GUI工具中嵌入HTML页面 wxPython的wx html和wx html2模块支持解析和显示HTML文件内容 wx html HtmlWindow对象是一个通用的HTML浏览器 但不是一个全功能的浏览器 所
  • Go语言基础整理集合

    什么是Go语言 go语言是一门静态强类型语言 什么是动态和静态 可以理解为解释型和编译型 python 动态解释型语言 一边编译一边执行 golang java 静态编译型语言 必须先将文件编译成可执行文件后才能运行 什么是强类型语言 强制
  • qt ini 文件读写以及 节点的遍历

    qt 的配置文件一般都用ini文件 在此我记录下使用方法 ini 组成简介 INI文件由节点 键 值组成 如下面代码中 fileSetting gt setValue fileSave savePath filePath 节点 fileSa