学习目标: 文件初始化配置
前置环境
运行环境:qt creator 4.12
学习内容
INI 文件是一种常见的配置文件格式,它通常用于存储应用程序或系统的设置和参数。INI 文件的格式很简单,由以下几个部分组成:
- 节(Section):
- 节用方括号括起来,如 [General]、[Network] 等。
- 节用于将配置项进行分组,方便管理和组织。
- 键值对(Key-Value Pair):
- 键值对由键和值组成,用等号分隔,如 Name=John、Port=8080。
- 键通常是一个字符串,用于标识配置项。
- 值可以是字符串、数字、布尔值等各种数据类型。
- 注释:
- 注释用分号或者井号开头,如 ; This is a comment。
- 注释可以用于解释配置项的含义和用途。
例如:
[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)