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)

<think>好的,用户想知道如何在Qt项目中集成和配置DLT日志文件。首先,我需要回忆一下DLT的相关知识。DLT是Diagnostic Log and Trace,常用于汽车行业的日志系统,用于记录和传输诊断数据。Qt应该提供了相关的模块或者库来支持DLT。 首先,检查用户提供的引用内容,虽然引用中没有直接提到DLT,但引用[2]提到了Qt中使用QSettings类读写配置文件,引用[3]提到了集成CEF3浏览器组件的方法,这可能涉及到如何集成第三方库到Qt项目中。集成DLT可能也需要类似的步骤,比如添加库文件配置.pro文件等。 接下来,应该考虑Qt的Dlt模块是否存在。Qt Automotive Suite里有Qt Dlt,可能需要安装相应的模块或者通过包管理工具获取。如果用户没有安装,可能需要指导他们安装相关的库,比如通过apt-get或者源码编译。 然后,配置项目文件.pro。根据引用[4],Qt的.pro文件需要正确配置,比如添加必要的库和包含路径。可能需要类似“QT += dlt”这样的语句,或者手动添加包含路径和链接库。 代码部分,可能需要初始化DLT,注册应用和上下文,使用宏记录日志。参考引用[2]中的QSettings示例,可能需要创建相关的对象并进行配置。此外,引用[3]中提到的使用Visual Studio封装CEF3,可能类比需要确保DLT库的编译器兼容性,比如使用正确的编译器版本。 可能还需要处理跨平台问题,比如在Linux和QNX上的配置差异。同时,生成的相关问题需要考虑用户可能遇到的后续问题,比如性能优化、日志过滤等。 需要确保步骤清晰,用户能够逐步跟随操作。最后,验证配置是否正确,比如编译项目是否报错,日志文件是否生成,或者使用DLT Viewer查看日志输出。</think>在Qt项目中集成DLT(Diagnostic Log and Trace)日志系统需要以下步骤: ### 1. 安装DLT依赖库 首先确保系统已安装`dlt-daemon`和开发包: ```bash sudo apt-get install dlt-daemon libdlt-dev # Ubuntu/Debian ``` 对于嵌入式平台(如QNX),需使用对应平台的SDK交叉编译DLT库[^3]。 ### 2. 配置.pro项目文件Qt项目的.pro文件中添加DLT库链接: ```qmake # 添加DLT库链接 LIBS += -ldlt # 包含头文件路径(根据实际安装路径调整) INCLUDEPATH += /usr/include/dlt ``` ### 3. 初始化DLT上下文 在main.cpp中进行初始化: ```cpp #include <dlt/dlt.h> DLT_DECLARE_CONTEXT(myContext); // 声明上下文 int main(int argc, char *argv[]) { DLT_REGISTER_APP("MYAPP", "My Qt Application"); // 注册应用 DLT_REGISTER_CONTEXT(myContext, "MAIN", "Main context"); // 注册上下文 QApplication a(argc, argv); // 示例日志记录 DLT_LOG(myContext, DLT_LOG_INFO, DLT_STRING("Application started")); int ret = a.exec(); DLT_UNREGISTER_CONTEXT(myContext); DLT_UNREGISTER_APP(); return ret; } ``` ### 4. 使用日志宏 在代码中使用标准日志接口: ```cpp DLT_LOG(myContext, DLT_LOG_ERROR, DLT_STRING("File not found:"), DLT_STRING(filePath)); ``` ### 5. 配置日志路由(可选) 创建`dlt.conf`配置文件指定日志存储路径: ```ini [Context1] ContextName = MAIN LogLevel = INFO TraceStatus = ON [Log] OutputPath = /var/log/myapp.dlt ``` ### 6. 查看日志 使用DLT Viewer工具分析日志: ```bash dlt-viewer -c /var/log/myapp.dlt ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值