您的位置:首页 > 健康 > 养生 > Qt 文件初始化配置ini/conf类型读写

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

2024/12/27 2:57:20 来源:https://blog.csdn.net/weixin_50873490/article/details/140161131  浏览:    关键词: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 .confQSettings *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 纪元差 17891566544sqlinit->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)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com