当前位置: 首页 > news >正文

【QT】QSettings读取中文乱码

解决QSettings读取中文乱码

    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 可以帮助解决乱码问题

#include <QTextCodec>  int main(int argc, char *argv[]) {  QCoreApplication a(argc, argv);  QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));  // ... 其他代码 ...  return a.exec();  
}

QSettings遍历子组

[General]  
AppName=MyApp  
Version=1.0  [UserSettings]  
Username=User123  
Password=pass123  
Language=en  [Advanced]  
DebugMode=false  
LogFile=log.txt  
MaxConnections=10
#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();  
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 小程序外卖开发中的关键技术与实现方法
  • Android WebSocket长连接的实现
  • winhttp劫持dll
  • 文字悬停效果
  • PCIE的吞吐量如何计算和记忆诀窍?
  • Calibre版图验证工具调用_笔记
  • 下载kibana-7.10.2教程
  • 恭喜!X医生斩获英国伦敦大学学院访问学者邀请函
  • Java工程师入职指南:从准备到适应新工作的每一步
  • [Python学习篇] Python运算符
  • GStreamer编译安装——使用Meson从源代码编译
  • 服务器无法远程桌面连接,解决服务器进行无法远程桌面连接方法有哪些
  • 在typora中利用正则表达式,批量处理图片
  • 【MySQL】MySQL45讲-读书笔记
  • 通过Stream流对集合进行操作
  • 07.Android之多媒体问题
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • canvas绘制圆角头像
  • JavaScript创建对象的四种方式
  • JAVA并发编程--1.基础概念
  • js
  • Material Design
  • php面试题 汇集2
  • PHP面试之三:MySQL数据库
  • Python_网络编程
  • python大佬养成计划----difflib模块
  • SOFAMosn配置模型
  • spring boot 整合mybatis 无法输出sql的问题
  • Vue.js 移动端适配之 vw 解决方案
  • yii2中session跨域名的问题
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 力扣(LeetCode)56
  • 浅谈Golang中select的用法
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 学习使用ExpressJS 4.0中的新Router
  • 再次简单明了总结flex布局,一看就懂...
  • UI设计初学者应该如何入门?
  • (¥1011)-(一千零一拾一元整)输出
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (k8s中)docker netty OOM问题记录
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (简单) HDU 2612 Find a way,BFS。
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (万字长文)Spring的核心知识尽揽其中
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET Framework 3.5安装教程
  • .NET 反射 Reflect
  • .net 简单实现MD5
  • .net 托管代码与非托管代码