记录一次QT乱码问题
问题描述
在敲陆文周的书《QT5开发及实例》的示例代码时,出现乱码,如下图所示

具体代码如下
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->treeWidget->clear();int groupSize = 2;int itemSize = 4;for(int i=1;i<=groupSize;i++){QTreeWidgetItem *group = new QTreeWidgetItem(ui->treeWidget);group->setText(0,QString("小组")+QString::number(i));group->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);group->setCheckState(0,Qt::Unchecked);for(int j=1;j<=itemSize;j++){QTreeWidgetItem *subItem = new QTreeWidgetItem(group);subItem->setText(0,QString("项目")+QString::number(i)+QString::number(j));subItem->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);subItem->setCheckState(0,Qt::Unchecked);}}
}
原因分析
在阅读csdn大佬急支糖浆的文章后,理解了 源文件码字符集,执行字符集等概念。
- 源文件编码字符集:源文件保存时的编码方式,如gbk,utf-8等。
- 执行字符集:编译器编译后的可执行文件的编码方式。
本人采用的源文件编码字符集为UTF-8 BOM,编译器为msvc2019,由于源文件编码字符集带BOM,因此,msvc的执行字符集会变为local编码,即GBK(系统为中文系统)。到这里,一切都是正常的。
罪魁祸首:因为QT中的QString在初始化时会使用QString::fromUTF8将UTF-8编码转为UTF-16编码,由于执行编码为gbk,这里使用fromUTF8是错误的,这便是乱码的原因所在,下图可证明我的观点:

可以看到,使用cout打印出字符串是正确的,因为它不需要像QString那样使用fromUTF8函数进行转码。
解决方案
- 换成mingw编译器,这样无论源文件编码字符集是否带BOM,mingw都会采用utf8作为执行字符集,这样QString使用fromUTF8函数就能转码成功。
- 继续使用msvc编译器,但需要加上预编译指令指示编译器采用utf-8作为执行字符集
#pragma execution_character_set("utf-8") - 继续使用msvc编译器,但是将文件编码方式设置为不带BOM,这样fromUTF8也能正确转码。

- 指示QString使用locale编码来进行转码,但这种方式在高版本的qt中貌似已经失效
QTextCodec *codec = QTextCodec::codecForName("utf-8");QTextCodec::setCodecForLocale(codec);QTextCodec::setCodecForCStrings(codec);QTextCodec::setCodecForTr(codec);
推荐采用第二种方案解决。
相关文章:
记录一次QT乱码问题
问题描述 在敲陆文周的书《QT5开发及实例》的示例代码时,出现乱码,如下图所示 具体代码如下 Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);ui->treeWidget->clear();int groupSize 2;int ite…...
怎么提升搜狗网站排名
在当今数字化时代,网站排名对于品牌、企业以及个人都至关重要。而对于许多网站来说,搜狗搜索引擎是一个重要的流量来源。为了在搜狗上取得更好的排名,不仅需要优化网站内容,还需要巧妙运用一些工具和技巧。在本文中,我…...
搜索经典题——填充 9*9矩阵
题目:给定一个九行九列矩阵,填充矩阵元素,要求: 1、每一行每一列,每个小九宫格(图片画粗的地方就是)不能包含相同元素 2、每一行,每一列,每个小九宫格均会完整出现1-9的数…...
Vue待办事项(组件,模块化)
//html页面代码 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> <style> * { padding: 0; margin: 0; }…...
Vue中的组件
在应用程序的开发中,组件是不可缺少的。在Vue的使用中,同样也会用到组件。 vue组件的一般知识点: 1、组件的名字唯一; 2、组件以Html形式书写; 3、组件可以复用; 4、组件可以嵌套&…...
svg矢量图标在wpf中的使用
在wpf应用程序开发中,为支持图标的矢量缩放,及在不同分辨率下界面中图标元素的矢量无损缩放,所以常常用到svg图标,那么如果完 美的将svg图标运用到wpf日常的项目开发中呢,这里分享一下我的个人使用经验和详细步骤。 步…...
如何在云端加速缓存构建
缓存是指将某类数据存储起来以便以后重复使用的过程,它的运用在开发场景中非常普遍。类似于你习惯把最常用的调料放在厨房台面上,而不是橱柜里,这样你在准备大餐时就可以轻松取用。 但对于一个更为技术性、更精确的用例,比如像谷…...
JavaWeb-Cookie与Session
一、概念 是否还记得我们在HTTP概念中提到:HTTP的一大特点是无状态,这意味着多次HTTP请求之间是无法共享数据的。而在请求之间共享一些数据又是我们期望达到的效果。(例如登录的记住我功能)于是便有了会话跟踪技术,而…...
ZABBIX根据IP列表,主机描述,或IP子网批量创建主机的维护任务
有时候被ZABBIX监控的主机可能需要关机重启等维护操作,为了在此期间不触发告警,需要创建主机的维护任务,以免出现误告警 ZABBIX本身有这个API可供调用(不同版本细节略有不同,本次用的ZABBIX6.*),实现批量化建立主机的维护任务 无论哪种方式(IP列表,主机描述,或IP子网)创建维护…...
PMIS_ENT_STD
...
32 登录页组件
效果演示 实现了一个登录页面的样式,包括一个容器、左侧和右侧部分。左侧部分是一个背景图片,右侧部分是一个表单,包括输入框、复选框、按钮和忘记密码链接。整个页面的背景色为白色,容器为一个圆角矩形,表单为一个半透…...
Docker(一)简介和基本概念:什么是 Docker?用它会带来什么样的好处?
作者主页: 正函数的个人主页 文章收录专栏: Docker 欢迎大家点赞 👍 收藏 ⭐ 加关注哦! 一、简介 本章将带领你进入 Docker 的世界。 什么是 Docker? 用它会带来什么样的好处? 好吧,让我们带…...
【Linux】进程的概念 进程状态 进程优先级
Content 一、什么是进程1. 进程的概念2. 进程的描述 - 进程控制块(PCB)3. Linux下的进程 二、进程状态1. 教科书中的进程状态运行状态阻塞状态挂起状态 2. Linux下的进程状态R(running)- 运行状态S(sleeping) - 睡眠状…...
Go语言热重载和优雅地关闭程序
Go语言热重载和优雅地关闭程序 我们有时会因不同的目的去关闭服务,一种关闭服务是终止操作系统,一种关闭服务是用来更新配置。 我们希望优雅地关闭服务和通过热重载重新加载配置,而这两种方式可以通过信号包来完成。 1、代码实现 package…...
Python实现两个列表相加的方法汇总
1. 使用 “” 运算符 通过 “” 运算符将两个列表相加,得到一个新的列表。例如: list1 [1, 2, 3] list2 [4, 5, 6] result list1 list2 print(result) # [1, 2, 3, 4, 5, 6]2. 使用 extend 方法 使用 extend 方法将一个列表中的元素逐个添加到另…...
debian12.4配置
文章目录 debian12.4配置概述笔记将非root用户添加到sudo组更换国内源配置ssh的客户端访问END debian12.4配置 概述 在虚拟机中装了一个debian12.4, 想配置ssh客户端连接, 出了问题. 配置乱了, 还好长了个心眼, 做了快照. 发现2个问题: debian12.4默认安装完, 有ssh, 先检查…...
linux切换root用户su - root和su root的区别
这里说一下login shell和 no login shell的区别 通过tty客户端登陆的shell就是login shell,通过在图形界面使用ctrlshiftt的方式新建的shell是no login shell login shell 主要读取两个配置文件/etc/profile和~/.bash_profile no login shell 读取的文件和顺序为&am…...
SQL Server Management Studio创建数据表
文章目录 一、建表注意事项1.1 数据类型1.2 建立数据表的基本SQL语法 二、实例说明2.1 创建数据表2.2 实例2 三、标识列和主键示例: 一、建表注意事项 1.1 数据类型 可以看这个去了解数据类型: 1.2 建立数据表的基本SQL语法 建立数据表的基本 SQL 语…...
【AI的未来 - AI Agent系列】【MetaGPT】4.1 细说我在ActionNode实战中踩的那些坑
文章目录 1. MetaGPT 0.5.2 版本的坑1.1 坑一:cannot import name "ActionNode" from "metagpt.actions.action"1.2 坑二:simple_fill 没有参数 schema1.3 坑三:ActionNode一直在循环执行, 2. 升级成 MetaGP…...
Android学习(五):常用控件
Android学习(五):常用控件 常用控件 TextViewEditTextButtonRadioButtonImageView 1、TextView控件 1.1、简介 TextView是用于显示文字(字符串)的控件,可在代码中通过设置属性改变文字的大小、颜色、样式等功能。 1.2、示例…...
QR码扫描模块全解析:从原理到工程实践
1. 项目概述:不只是“扫一扫”那么简单如果你以为QR码扫描就是个“打开摄像头、对准、识别”的简单功能,那可能错过了它背后一整套精密的技术栈和丰富的应用场景。作为一个在移动应用和嵌入式设备领域折腾了十多年的老码农,我见过太多项目在集…...
Flyback电源里,为什么TVS管和二极管要‘组队’才能搞定电压尖峰?
Flyback电源中TVS管与二极管的协同钳位机制解析 在反激式(Flyback)电源设计中,初级侧的电压尖峰抑制一直是工程师面临的棘手问题。许多初学者会疑惑:为什么不能像继电器线圈保护那样,仅用单个二极管实现钳位?这个看似简单的疑问背…...
Unity3D RPG游戏开发实战:从零搭建角色与场景交互系统(含源码)
1. Unity3D RPG游戏开发基础准备 第一次打开Unity3D时,很多人会被复杂的界面吓到。别担心,我们先从最基础的设置开始。我建议使用2021 LTS版本,这个版本稳定性好,社区支持也完善。安装完成后,记得在Hub里勾选"Wi…...
告别‘有线无网’:手把手修复Ubuntu 20.04上RTL8168网卡的驱动‘掉链子’问题
深度排查Ubuntu 20.04下RTL8168网卡驱动的疑难杂症 当你满怀期待地在工作站上安装好Ubuntu 20.04,准备开始一天的高效开发时,却发现网络连接图标上那个刺眼的红色叉号——有线网络无法连接。这种"有线无网"的窘境,对于依赖网络工作…...
FPGA时序约束避坑指南:Set Bus Skew与Set Max Delay到底有什么区别?
FPGA时序约束深度解析:Set Bus Skew与Set Max Delay的核心差异与工程实践 在FPGA设计的时序收敛过程中,工程师们常常面临一个关键抉择:何时使用Set Max Delay,何时又该选择Set Bus Skew?这两种约束看似都与路径延迟相关…...
国产电池包传感监测芯片:从AFE设计到BMS系统实战解析
1. 项目概述:从“芯”守护,让每一度电都安全在电动汽车的心脏——动力电池包里,温度、电压、电流这些关键参数哪怕出现一丝一毫的异常,都可能从量变引发质变,最终导致热失控等严重安全事故。因此,对电池包内…...
聚合物半导体薄膜:柔性电子皮肤如何实现无感健康监测
1. 项目概述:从“硬核”到“柔韧”的健康监测革命如果你还在用那些又厚又硬、贴着皮肤半天就发痒发红的老式健康监测电极,是时候了解一下这个正在改变游戏规则的新玩意儿了——聚合物半导体薄膜。这可不是什么实验室里的遥远概念,它正从顶尖期…...
Hitboxer:终极免费SOCD按键重映射工具,3分钟彻底解决游戏输入冲突
Hitboxer:终极免费SOCD按键重映射工具,3分钟彻底解决游戏输入冲突 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 还在为游戏中同时按下相反方向键导致角色卡顿而烦恼吗?Hitb…...
从滑动变阻器到真实传感器:STM32CubeMX ADC单通道采集电压的校准与数据处理实战
从滑动变阻器到真实传感器:STM32CubeMX ADC单通道采集电压的校准与数据处理实战 在嵌入式开发中,ADC(模数转换器)是将模拟信号转换为数字信号的关键外设。许多开发者能够通过STM32CubeMX快速配置ADC并获取原始值,但当…...
Linux串口编程进阶:深入termios2结构体,搞定CH340/FTDI各种转接器的非标准波特率
Linux串口编程实战:破解CH340/FTDI非标准波特率适配难题 当你在工业物联网项目中尝试将某个9600bps的设备升级到115200bps时,可能会发现某些USB转串口适配器死活不配合——明明代码正确,波特率却始终无法生效。这不是你的错,而是…...
