Qt: QSettings的语句排列顺序。适用范围

文章介绍了QSettings在处理配置文件时的注意事项,包括其适用范围、Linux下的限制、自动文件打开和关闭可能导致的问题。强调了QSettings在特定操作顺序下的正确用法,以及如何避免中文乱码和确保写入同步。还提到了替代方案如C++的其他库来处理配置文件。
摘要由CSDN通过智能技术生成

目录

QSettings详细使用方法,避免错误

QSettings的适用范围

-------------

QSettings的适用范围

有其专门的用途,不应该将其用途扩大化。

Linux 创建启动器(.Desktop文件) 及 例子。QSettings目前规则限制 无法正确读取

  Linux 创建启动器(.Desktop文件) 及 例子。QSettings目前规则限制无法正确读取。_linux下desktop_ken2232的博客-CSDN博客

读取错误的表现:

空格 -->%20

[   ]  ---05B ??

--------------

使用 QSettings m_IniFile = new QSettings("ini文件的路径", QSettings::IniFormat);的方式打开,或关闭文件,采用的是 Qt系统默认的、未明确指出规则的(在官方文档中没有明确指出?)、自动的文件打开和关闭模式;

特别是自动文件关闭模式,无需程序员自己控制;这既是好处,同时,也是坏处。

坏处就是:这会产生了不可控制的问题。

问题:

当操作语句不符合官方样例样式时,语句可能运行成功,也可能运行失败。

由于文件打开和关闭;主要是文件何时关闭,不受程序员自己控制;这会产生读写错误问题。并且在官方文档中也没有看到有明确的规则说明??于是,这就需要自己摸索?

===-------------------------

Qt 在于简单化了使用。有些场景,还得靠 C++


开源 fifo_map:C++实现的支持插入顺序的高效map (***)

  https://blog.csdn.net/ken2232/article/details/132122582

C++ 读写配置文件 ini

  https://wenku.csdn.net/answer/dea0047e89164d6a9bca9023064eb1da

SimpleIni 是一个跨平台的 C++ 库,支持Windows, WinCE and Linux系统,提供一个简单的API用于操作 ini 配置文件


simpleini项目地址:cpp库
https://github.com/brofield/simpleini

下载:debian   Folder: 4.20+dfsg-1| Debian Sources

inih : c库

下载:debian   Folder: 55-1| Debian Sources

iniparser

下载:debian    Folder: src| Debian Sources

------------------------------------------

====================

正常顺序:

// 根据ini文件路径新建QSettings类

QSettings m_IniFile = new QSettings("ini文件的路径", QSettings::IniFormat);

m_IniFile ->beginGroup("节名"); // 设置当前节名,代表以下的操作都是在这个节中

m_IniFile->setValue( "键名", "键对应的值"); // 因为上面设置了节了,这里不在需要把节名写上去

m_IniFile.endGroup(); // 结束当前节的操作

有效顺序:

QSettings m_IniFile = new QSettings("ini文件的路径", QSettings::IniFormat);

for(int a=0; a<5; a++) {

m_IniFile ->beginGroup("节名");

m_IniFile->setValue( "键名", "键对应的值");

m_IniFile.endGroup();

}

无效顺序:

QSettings m_IniFile = new QSettings("ini文件的路径", QSettings::IniFormat);

//这里到底插入多少条语句以及什么类型的语句造成setting文件本次读写的错误呢?需要自己摸索?

插入若干其他语句 // 可能会造成 已经打开的 ini文件,又关闭了。

}  

for(int a=0; a<5; a++) {

m_IniFile ->beginGroup("节名");

m_IniFile->setValue( "键名", "键对应的值");

m_IniFile.endGroup();

}

结论:

Qt 采用特别的封装,因此,需要按照 Qt的专有规则来使用。

C 与 C++有共同规则,也有不同;

同样,std c++ 与 Qt c++也是类似的。

===================================

QSettings详细使用方法,避免错误

QSettings能读写配置文件,当配置文件不存在时,可生成配置文件。

1.避免中文乱码,需要设置配置文件编码

2.写入配置项后,必须同步才能写入文件


#include <QtCore/QtCore>
#include <QFile>
#include <QDebug>
#include <QTextCodec> 
 
void ConfigSetting(void)
{
    //文件路径+文件名
    QString fileName = QCoreApplication::applicationDirPath() + "/Config.ini";

    //创建配置目标,输入文件路径,文件格式
    QSettings *setting = new QSettings(fileName , QSettings::IniFormat);
    //设置文件编码,配置文件中使用中文时,这是必须的,否则乱码
    setting->setIniCodec(QTextCodec::codecForName("UTF-8"));

    // 判断文件是否存在
    if(QFile::exists(fileName))
    {// 文件存在,读出配置项
        // 这里的setting->value的第二参数,是配置项缺省值,即当读取的配置项不存在时,读取该值
        // User是配置组,name和age是配置项
        QString name = setting->value("User/name", "张三").toString();
        int age = setting->value("User/age", 30).toInt();
    }
    else {// 文件不存在,写入配置项,生成配置文件
        setting->setValue("User/name", "张三");
        setting->setValue("User/age", 30);
        // setValue只是把配置项写入了缓冲区,若要写入文件,还需执行同步
        // 不同步,无法写入文件,无法生成文件
        setting->sync();
    }
}

————————————————

版权声明:本文为CSDN博主「00汪汪00」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:QSettings详细使用方法,避免错误_00汪汪00的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值