一、目的
QSetting终极目的是,模糊平台,一套方法可以同时写入或者读取配置文件及注册表。
二、问题
QSetting确实兼顾了平台,linux、mac、windows三大平台均能使用,但就像所有事物一样,大一统的背后必定要做出一些让步,在我看来也在所难免,毕竟这三个平台差异太大了,下面逐个看已知问题:
1、读取中文乱码
setIniCodec该方法在qt6中已经被彻底移除,qt6中默认是UTF-8;
如果版本早于qt6,请按如下使用,否则读取中文乱码:
QSettings settings("D:/user.ini", QSettings::IniFormat);
settings.setIniCodec(QTextCodec::codecForName("UTF-8"));
……
2、如果键值中有,号则是数组
如下图,当值中有逗号时,取值必须用数组,否则值为空;
3、如果键值中有;号则只读分号之前数据
4、无法读取带"\"键的键值
qt文档中明确标注\是分割符,所以值中有该符号时QSetting读取为空,建议采用以下方法读取
QFile file(path);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return "";
QTextStream in(&file);
QString String;
while (!in.atEnd())
{
String= in.readLine();
if(String.contains(value+"="))
{
String.remove(value+"=");
out=String;
break;
}
}