解决QSettings读取中文乱码
cpp
QString sConfigFile = sDataDir + QDir::separator() + "config" + QDir::separator() + "Info.ini";
QSettings configFile(sConfigFile, QSettings::IniFormat);
configFile.setIniCodec("utf-8");
QSettings存储格式
- NativeFormat:使用操作系统推荐的存储方式,如Windows的注册表、macOS的plist文件等。
- IniFormat:将数据保存为INI格式的文本文件。
- CustomFormat:允许指定自定义的存储格式(如XML、JSON等),但需配合自定义的QSettings backend实现。
在Windows平台,当使用QSettings::NativeFormat时,路径名必须使用"/"作为分隔符
其他方式(未验证)
通过初始化 QTextCodec 来影响整个 Qt 应用程序的编码处理。在应用程序的 main() 函数中,设置默认的文本编解码器为 UTF-8 可以帮助解决乱码问题
cpp
#include <QTextCodec>
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
// ... 其他代码 ...
return a.exec();
}
QSettings遍历子组
xml
[General]
AppName=MyApp
Version=1.0
[UserSettings]
Username=User123
Password=pass123
Language=en
[Advanced]
DebugMode=false
LogFile=log.txt
MaxConnections=10
cpp
#include <QCoreApplication>
#include <QSettings>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 初始化QSettings对象,指向example.ini文件
QSettings settings("example.ini", QSettings::IniFormat);
// 获取所有的子组(或称为"sections"或"groups")
QStringList groups = settings.childGroups();
// 遍历所有子组
for (const QString &group : groups) {
// 切换到当前子组
settings.beginGroup(group);
// 打印子组名
qDebug() << "[" << group << "]";
// 获取当前子组下的所有键
QStringList keys = settings.allKeys();
// 遍历所有键,并打印其值
for (const QString &key : keys) {
// 读取并打印键值对
qDebug() << key << "=" << settings.value(key).toString();
}
// 结束当前子组,返回到根组
settings.endGroup();
// 打印一个空行作为分隔符
qDebug() << "";
}
return a.exec();
}