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)

上一篇:【JavaScript脚本宇宙】从实用工具到日期处理:深度解析JavaScript库的应用与优势


下一篇:[leetcode hot 150]第一百三十题,被围绕的区域