目录
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版权协议,转载请附上原文出处链接及本声明。