Qt 文件初始化配置ini/conf类型读写

学习目标: 文件初始化配置

前置环境

运行环境:qt creator 4.12

学习内容

INI 文件是一种常见的配置文件格式,它通常用于存储应用程序或系统的设置和参数。INI 文件的格式很简单,由以下几个部分组成:

  1.     节(Section):
    1.      节用方括号括起来,如 [General]、[Network] 等。
    2.     节用于将配置项进行分组,方便管理和组织。 
  2.     键值对(Key-Value Pair):
    1.      键值对由键和值组成,用等号分隔,如 Name=John、Port=8080。
    2.     键通常是一个字符串,用于标识配置项。 
    3.      值可以是字符串、数字、布尔值等各种数据类型。
  3.     注释:
    1.      注释用分号或者井号开头,如 ; This is a comment。
    2.     注释可以用于解释配置项的含义和用途。 

    例如:

[General]
; General settings
Name=MyApplication
Version=1.2.3
Language=en_US

[Network]
; Network settings
ServerAddress=192.168.1.100
Port=8080
Timeout=30

[Database]
; Database settings
Host=localhost
User=myuser
Password=secret
Database=mydb

INI 文件的优点包括:

简单易懂的格式,容易编辑和维护。
跨平台兼容,可在 Windows、Linux 和 macOS 等系统上使用。
可以使用文本编辑器打开和修改,方便人工编辑。
可以使用编程语言方便地读取和写入配置信息。

详细主要代码

#include <QCoreApplication>

#include<QSettings>
#include<QDebug>
#include<QDateTime>
void create_ini(){
    //创建mysql.ini文件 QSettings::IniFormat是windwos配置文件,后缀是ini   unix则是QSettings::NativeFormat .conf
    QSettings *sqlinit =new QSettings("mysql",QSettings::IniFormat);
    sqlinit->clear();
    sqlinit->setValue("Database/ip","127.0.0.1");
    sqlinit->setValue("Database/port","3306");
    sqlinit->setValue("Database/user","root");
    sqlinit->setValue("Database/pwd","111111");
     //因中文文件操作乱码  使用toSecsSinceEpoch  1970 年 1 月 1 日 00:00:00 UTC 纪元差 17891566544
    sqlinit->setValue("/network/datetime",QDateTime::currentDateTime().toSecsSinceEpoch());

    sqlinit->sync();
    delete  sqlinit;

    //方法2多次创建QSetting对象  为后续的配置文件操作提供了上下文信息。
    /*
    在 Windows 平台上,配置文件会存储在注册表中,路径类似于 HKEY_CURRENT_USER\Software\4399\Star Runner。
    在 macOS 和 Linux 平台上,配置文件会存储在用户的配置目录中,路径类似于 ~/.config/4399/mysql.conf。
    */
    QCoreApplication::setOrganizationName("4399");
    QCoreApplication::setOrganizationDomain("4399.com");
    QCoreApplication::setApplicationName("mysql");
    QSettings settings; //自带上列属性
}

void ini_read(){
    QSettings* sqlRead=new QSettings("mysql",QSettings::IniFormat);
    QString ip=sqlRead->value("Database/ip").toString();
    uint64_t port =sqlRead->value("Database/port").toUInt();
    QDateTime dateTime = QDateTime::fromSecsSinceEpoch(sqlRead->value("network/datetime", 0).toLongLong());
    QString time = dateTime.date().toString();

    qDebug() << ip << port << time;

    delete sqlRead;

}
void  ini_write(){
    QSettings *sqlwr =new QSettings("mysql",QSettings::IniFormat);

    sqlwr->beginGroup("redis");

    sqlwr->setValue("/ip","127.0.0.1");
    sqlwr->setValue("/port","8000");

    sqlwr->endGroup();
    sqlwr->sync(); //因为存储在缓冲区中,使用sync落盘

    delete sqlwr;

}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    //写入操作
    create_ini();
    //读取操作
    ini_read();

    ini_write();

    //一次性全部读取
    QSettings setting("mysql",QSettings::IniFormat);
    setting.sync();
    foreach(QString key,setting.allKeys())
    {
        qDebug()<<key.toUtf8().data()<<":"<<setting.value(key).toString().toUtf8().data();
    }


    return a.exec();
}

总结:

创建2种方法,1种直接new 第二种先设置参数,再new 对象默认使用预先设置的参数

IniFormat是windwos配置文件,后缀是ini   unix则是QSettings::NativeFormat .conf

读: 使用values ,allkeys读取全部信息

写: 使用setValues,因为每次写入缓冲区,需要持久化则调用asyn落盘操作。
 

 最后附上源代码链接
对您有帮助的话,帮忙点个star

29-INI · jbjnb/Qt demo - 码云 - 开源中国 (gitee.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/779312.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Redis和阻塞队列的 异步秒杀业务

异步前 之前的秒杀业务的查询优惠券、查询订单、减库存、创建订单都要查询数据库&#xff0c;而且有分布式锁&#xff0c;使得整个业务耗时长&#xff0c;对此采用异步操作处理&#xff0c;异步操作类似于餐厅点餐&#xff0c;服务员负责点菜产生订单、厨师负责根据订单后厨做…

LabVIEW图像分段线性映射

介绍了如何使用LabVIEW对图像进行分段线性映射处理&#xff0c;通过对特定灰度值区间进行不同的线性映射调整&#xff0c;以优化图像的显示效果。案例中详细展示了如何配置和使用LabVIEW中的图像处理工具&#xff0c;包括设置分段区间、计算映射参数和应用映射函数等步骤。 实…

STM32智能医疗监测系统教程

目录 引言环境准备智能医疗监测系统基础代码实现&#xff1a;实现智能医疗监测系统 4.1 数据采集模块 4.2 数据处理与分析 4.3 通信系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;医疗监测与优化问题解决方案与优化收尾与总结 1. 引言 智能医疗监测系统通过STM32嵌…

Python爬取股票信息-并进行数据可视化分析,绘股票成交量柱状图

为了使用Python爬取股票信息并进行数据可视化分析&#xff0c;我们可以使用几个流行的库&#xff1a;requests 用于网络请求&#xff0c;pandas 用于数据处理&#xff0c;以及 matplotlib 或 seaborn 用于数据可视化。 步骤 1: 安装必要的库 首先&#xff0c;确保安装了以下P…

virtualbox窗口和win10窗口的切换

1、问题&#xff1a; 从windows切换到虚拟机可以用快捷键 ALTTAB&#xff0c;但是从虚拟机到windows使用 ALTTAB 无法成功切换 2、解决方法&#xff1a; 注意&#xff1a;发现设置为ctrlAlt会导致打开终端快捷键&#xff08;CtrlAltT&#xff09;失效&#xff0c;建议这里设置…

【C++】开源:地图投影和坐标转换proj库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍地图投影和坐标转换proj库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&a…

mars3d加载wms服务或者wmts服务注意事项

1.wms只支持4326、3857、4490的标准切片&#xff0c;其他坐标系不支持 Mars3D三维可视化平台 | 火星科技 2.wmts同理&#xff0c;Mars3D三维可视化平台 | 火星科技 3.对应级别tilematrix找到的瓦片tilerow&tilecol这两个参数使用常见报错无效参考&#xff1a; 【Mars3d】…

VSCode设置字体大小

方法1&#xff1a;Ctrl 和 Ctrl -&#xff0c;可以控制整个VSCode界面的整体缩放&#xff0c;但是不会调整字体大小 方法2&#xff1a;该方法只能设置编辑器界面的字号&#xff0c;无法改变窗口界面的字号。 &#xff08;1&#xff09;点开左下角如下图标&#xff0c;进入…

商贸物流大脑:大模型+数据要素赋能智慧物流数据平台

项目背景与意义 物流行业快速发展&#xff0c;数据量急剧增加&#xff0c;随着电子商务、智能制造等领域的快速发展&#xff0c;物流行业面领着前所未有的挑战和机遇&#xff0c;如效率低下、资源配置不均、信息不透明等问题。随着全球化和电子商务的快速发展&#xff0c;数据…

【Linux进阶】文件系统8——硬链接和符号连接:ln

在Linux下面的链接文件有两种&#xff0c; 一种是类似Windows的快捷方式功能的文件&#xff0c;可以让你快速地链接到目标文件&#xff08;或目录)&#xff1b;另一种则是通过文件系统的inode 链接来产生新文件名&#xff0c;而不是产生新文件&#xff0c;这种称为硬链接&…

Vue + SpringBoot:el-upload组件单文件、多文件上传实战解析

文章目录 单文件上传后端前端 多文件上传后端前端 单文件上传 后端 PostMapping("/uploadDxfFile") public R uploadDxfFile(RequestParam(value "file", required true) MultipartFile multipartFile) throws Exception {// 文件校验工作if (multipar…

【C语言小知识】缓冲区

缓冲区 当我们使用printf()将数据显示在屏幕上&#xff0c;或者使用scanf()函数将数据输入到电脑里&#xff0c;我们是否会产生些许疑问&#xff1f;为何输入的字符会直接显示到屏幕上等等。这里需要介绍一个C语言中的一个关键概念——缓冲区。 当我们使用老式系统进行运行代码…

机器学习之保存与加载

前言 模型的数据需要存储和加载&#xff0c;这节介绍存储和加载的方式方法。 存和加载模型权重 保存模型使用save_checkpoint接口&#xff0c;传入网络和指定的保存路径&#xff0c;要加载模型权重&#xff0c;需要先创建相同模型的实例&#xff0c;然后使用load_checkpoint…

创维汽车开展年中总结会:创新创造·勇开拓 智慧经营·攀高峰

2024年7月3日&#xff0c;回顾上半年的工作成果&#xff0c;总结经验教训&#xff0c;明确下半年的发展方向和重点任务&#xff0c;创维汽车于山西省晋中市榆次区山西联合创维体验中心开展年中总结会。 创维集团、创维汽车创始人黄宏生&#xff1b;开沃集团联合创始人、首席执…

每日一更 EFK日志分析系统

需要docker和docker-compose环境 下面时docker-compose.yaml文件 [rootnode1 docker-EFK]# cat docker-compose.yaml version: 3.3services:elasticsearch:image: "docker.elastic.co/elasticsearch/elasticsearch:7.17.5"container_name: elasticsearchrestart: …

process.env 管理 Vue 项目的环境变量(Vue项目中环境变量的配置及调用)

简述&#xff1a;在构建 Vue 应用时&#xff0c;管理配置是开发中的一个重要部分。不同的环境&#xff08;如开发、测试和生产&#xff09;往往需要不同的配置&#xff0c;例如 API、 基础 URL、第三方服务的密钥等。使用环境变量可以帮助我们更好地管理这些配置。这里将介绍如…

2 极/2 零 (2P2Z) 补偿器

极/2 零 &#xff08;2P2Z&#xff09; 补偿器是模拟 II 型控制器的数字实现。它是一种滤波器&#xff0c;通过考虑两个极点和一个零点&#xff0c;将特定的增益和相位升压引入系统。您必须战略性地选择每个极点和零点的频率位置&#xff0c;这将有助于实现所需的系统性能。在该…

当需要对大量数据进行排序操作时,怎样优化内存使用和性能?

文章目录 一、选择合适的排序算法1. 快速排序2. 归并排序3. 堆排序 二、数据结构优化1. 使用索引2. 压缩数据3. 分块排序 三、外部排序1. 多路归并排序 四、利用多核和并行计算1. 多线程排序2. 使用并行流 五、性能调优技巧1. 避免不必要的内存复制2. 缓存友好性3. 基准测试和性…

手把手教你从零开始构建 AI 视频生成模型

在 GitHub 上发现一篇教程&#xff0c;作者详细介绍了如何使用 Python 语言&#xff0c;从零开始构建一个文本到视频生成模型。 涵盖了从理解理论概念到架构编码&#xff0c;最终实现输入文本提示即可生成视频的全过程。 相关链接 GitHub&#xff1a;github.com/FareedKhan-…

PD协议诱骗芯片,XSP08Q,XSP16应用笔记

XSP08Q是3C数码或小家电产品的Type-C接口控制芯片&#xff0c;它负责和PD充电器通讯&#xff0c;获取充电器的快充电压档位&#xff0c;如5V4A&#xff0c;9V3A&#xff0c;12V2A&#xff0c;15V3A&#xff0c;20V5A等等。 XSP08Q支持PD协议&#xff0c;BC1.2协议&#xff0c;Q…