Qt 编码问题QTextCodec

qtextcodec file not find 问题解决 阅读详情
 

 

在学习计算机语言的时候, 关于字体编码问题, 一直是大家开始学习新语言比较头痛的问题,

在这边总结一下关于Qt图形框架开发的编码问题。

  一般在Window开发环境里,是GBK编码,在Linux开发环境里,是utf-8编码,关于编码的定义, 我就不这里多说了,网上有一大堆资料可以查看。

  qt对默认的是unicode编码,在Window开发环境里,比较通用的写法是: 在main.cpp文件中加入:

 

    1. QTextCodec *gbk = QTextCodec::codecForName("gb18030");

    2. QTextCodec::setCodecForTr(gbk);
    3. QTextCodec::setCodecForLocale(gbk);
    4. QTextCodec::setCodecForCStrings(gbk);

第一行:定义gb18030编码格式

第二行: 这个函数的作用是设置传给tr函数时的默认字符串编码,GUI设计中最常用的一种。

第三行:这个函数主要用于设置和对本地文件系统读写时候的默认编码格式。比如通过流读取一个文件内容时的编码格式。或者通过qDebug()输出打印信息时的编码。

第四行:这个函数主要是用在字符常量或者QByteArray构造QString对象时使用的一种编码方式。

同理,在Linux开发环境里, 通用的写法是:


    QTextCodec *utg8 = QTextCodec::codecForName("utf-8");

    QTextCodec::setCodecForTr(utg8 );
    QTextCodec::setCodecForLocale(utg8 );
    QTextCodec::setCodecForCStrings(utg8 );

一般我们做GUI设计的时候, 用到最多的也就是setCodecForTr()这个函数了,其他可以根据自己所用到的区域在设置,不过,为了通用编码,以便忘记了编码格式而弄的自己头痛, 建议还是把这三个统一设置一下吧,尽量避免中文乱码出现的概率。

下面讲一下关于编码转换问题

QT中的QString内容使用Unicode作为文本编码。但是实际系统中通常采用的是其他编码,例如GBK,utf8等。为了便于兼容这些格式,QT中还设置了两个字符串类型:

QCString类: C类型字符串,必须以0结尾,也就是中间不能含有0. 例如GBK编码的字符串

QByteArray类: 中间可以含有0.例如utf8编码的字符串

在设置下面的代码基础上:

     QTextCodec *gbk = QTextCodec::codecForName("gb18030");

    QTextCodec *utg8 = QTextCodec::codecForName("utf-8");

     QTextCodec::setCodecForTr(gbk);
     QTextCodec::setCodecForLocale(gbk);
     QTextCodec::setCodecForCStrings(gbk);

1. UTF-8 转换 GBK

QString U2G(QString utfStr)

{

       return gbk->toUnicode(utfStr.toLocal8Bit());

}

2 GBK 转换 UTF-8

QString U2G(QString gbkStr)

{

       return utg8->toUnicode(gbkStr.toUtf8());

}

-----------------------------------------------------------------------------------

    QTextCodec *gbk = QTextCodec::codecForName("gb18030");
    QTextCodec *utf8 = QTextCodec::codecForName("utf-8");

    QTextCodec::setCodecForTr(gbk);
    QTextCodec::setCodecForLocale(gbk);
    QTextCodec::setCodecForCStrings(gbk);


    QFile file("../test.txt");
    file.open(QIODevice::ReadOnly);
    QByteArray readByte = file.readAll();
    QString readStr = utf8->toUnicode(readByte.data());
    file.close();
    QString utfStr = QObject::trUtf8(readByte);    //utf-8
    QString gbkStr = QObject::tr("中文");          // gbk


    QString utf2gbk = gbk->toUnicode(readStr.toLocal8Bit());             // utf8 conver  gbk
    QString gbk2utf1 = utf8->toUnicode(utf2gbk.toUtf8());                 // gbk  convert utf8
    QString g2u = gbk->toUnicode(gbk->fromUnicode(readStr));            // gbk  convert utf8


    qDebug() << "gbk:" << gbkStr;
    qDebug() << "utf8:" << utfStr;
    qDebug() << "readStr:" << readStr;

    qDebug() << "read_size:" << readByte.length();
    qDebug() << "utf2gbk:" <<utf2gbk << "length:" << readStr.toLocal8Bit().length();
    qDebug() << "gbk2utf8-1:" << gbk2utf1 << " length: " << utf2gbk.toUtf8().length();
    qDebug() << "g2u" << g2u << "length:" << gbk->fromUnicode(utfStr).length();


    QLabel *label = new QLabel(utf2gbk);
    label->show();

Qt安装与使用经验分享;无.pro文件;无QTextCodec file;Qt小试;界面居中;无缝;更换Qt图标;更换Qt标题。 Qt安装与使用经验分享;无.pro文件;无QTextCodec file;Qt小试;界面居中;无缝;更换Qt图标;更换Qt标题。 阅读详情

相关推荐

Qt解决中文乱码QTextCodec

Qt解决中文乱码问题 在学习Qt编程的过程中,大多数人都遇到过中文乱码的问题。总结起来有三类: 1. Qt Creator中显示的汉字变为乱码,编辑器上方有“Could not decode "..." with "UTF-8"-encoding. Editing not possible.”的错误提示。此时,出现乱码的文档是不可编辑的。 2. Qt Creator中显示的汉字正常,但编译的时候会出现“常量中有换行符”等一系列错误报警。其实,这也是文字编码的问题。...

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 4181

QT中文编码处理

在学习计算机语言的时候, 关于字体编码问题, 一直是大家开始学习新语言比较头痛的问题, 在这边总结一下关于Qt图形框架开发的编码问题。 一般在Window开发环境里,是GBK编码,在Linux开发环境里,是utf-8编码,关于编码的定义, 我就不这里多说了,网上有一大堆资料可以查看。 qt对默认的是unicode编码,在Window开发环境里,比较通用的写法是...

weixin_34268310的博客 223

利用Civil3D装配设计器(SAC)建设高度形状自适应挡土墙

之前的模型都是点线,最后加一个形状,形成面。再根据现场测得的挡土墙的墙脚的点生成中心线(alignment),在中心线的基础上生成在现有地面(existing ground level)的高程(profile)。简单的说,该墙的墙趾啊,墙踵啊,基底下面那个把儿啊,都是随着高度变化的,而高度是随着下面这个高程图变化的。接着出现角度和Y的文本框,角度92,y 值随便写一个,然后重要的是,高程目标选路面(优先于Y值)。意思是P2的高度,也就是路面的高程,减去P10,墙脚高程,再减去墙脚埋进地里的深度0.8m。

测量老覃 的博客 1131

MacOS 如何解决“QtCore/QTextCodec’ file not found”的error

起因:跟着教程一步一步走的时候,突发一个叫“QtCore/QTextCodec’ file not found”的error…怎么解决?搜索了一下,发现有建议说要添加一个Qt5 Compatibility Mode的组件,然而刚开始学习Qt的小白完全不知道在哪可以添加组件…找了半天工具栏都没找到…最后…终于搜到了! 打开Qt安装目录 点开MaintainenceTool,然后奇迹就发生了,我们选择Add or remove components。 在Select Components中点开Qt 6.1.

yuanya的专栏 1691

Linux ELF文件解析:从file到readelf的完整工具链指南

ELF(可执行与可链接格式)是Linux系统中二进制文件的标准格式,定义了程序加载、内存布局和元数据组织方式。其核心原理在于通过程序头表描述执行视图、节区头表描述链接视图,实现代码与数据的结构化存储。这一格式的技术价值在于为程序调试、安全审计和性能优化提供了底层支持,尤其在动态链接、符号解析和内存保护机制中发挥关键作用。在应用场景上,系统管理员依赖ELF分析工具解决库依赖问题,安全研究员通过检查安全属性评估漏洞风险,开发者则利用反汇编进行代码调试。本文聚焦于file、readelf、objdump等工具链的

weixin_42691065的博客 635

ADS2023实战:2.4GHz超外差接收机从设计到链路预算全流程解析

本文以ADS 2023软件为平台,详细解析了2.4GHz超外差接收机从核心指标定义、架构原理到完整链路搭建与仿真的全流程。通过实战演练,重点阐述了如何利用ADS进行谐波平衡仿真和链路预算分析,以量化评估系统增益、噪声系数等关键性能,为射频工程师提供了一套从理论到仿真的系统级设计方法。

herb5的博客 818

一些小问题总结(一)2021年1季度

1、有可能多个 Object的signal会连接到同一个slot函数上(例如多个Button的clicked信号可能会connect到一个slot函数onClick()), 因此这是就 需要判断到底是哪个Object emit了这个signal,根据sender的不同来进行不同的处理. 在槽函数中:加入操作不同Object。 QObject * obj = sender(); //返回发出信号的对象,用QObject类型接收 QPushButton *button_tmp = qobject_cas

Aquarius_1的博客 434

团子杂记:SAP收入确认工具RAR(Revenue Recognition&Reporting)在新收入准则下的应用

SAP收入确认工具RAR知识分享

Lucas1211的博客 4284

Qt编码之谜:乱码问题的成因与解决策略

在我们的日常生活和工作中,经常会遇到一些文字显示不正常,变成了一串看不懂的字符,这就是我们所说的“乱码”。正确的编码设置,可以确保用户在使用我们的应用时,看到的是清晰、准确的字符,而不是乱码。正确的编码设置,可以确保用户在使用我们的应用时,看到的是清晰、准确的字符,而不是乱码。从心理学的角度看,学习往往伴随着不断的试错和调整,这就像是我们的大脑在逐渐优化其解决问题的“算法”。通过理解和解决这些问题,我们不仅可以修复当前的代码,更可以提升我们的编程能力,防止在未来的项目中犯相同的错误。

xxchaveablog的博客 2204

HPE磁盘阵列管理04——MSA事件

本文介绍了HPE MSA存储系统的事件处理机制,重点分析了常见磁盘故障事件及其解决方案。文章首先定义了MSA事件的五个严重级别(严重、错误、警告、信息和解决),然后详细列举了多个典型事件案例(如事件1、3、6、8、172等),包括每种事件的触发条件、对系统的影响以及具体修复步骤。针对磁盘故障场景,文章提供了更换磁盘、重建磁盘组、取消隔离等操作建议,并强调应及时配置备用磁盘以降低数据风险。最后指出更详细的事件说明可参考《MSA事件描述参考指南》,并提供了HPE官方手册下载链接。全文为技术人员处理MSA存储故障

istrangeboy&begin zero的博客 1121

VFIO框架源码分析(二十二)- IOMMUFD 的脏页跟踪与 Dirty Bits 读取

在虚拟化热迁移(Live Migration)的场景中,脏页追踪(Dirty Page Tracking)是最具挑战性的环节之一。它的核心任务是实时捕获设备(DMA)对内存的写操作,以便 VMM(如 QEMU)知道哪些内存页需要被重新传输到目标主机。在强耦合与粗粒度:脏页追踪是绑定在 Container 上的。这意味着,如果一个 Container 内有多个设备,哪怕只有一个设备在写内存,脏页追踪也会影响 Container 内的所有设备。软件模拟开销大。

qq_36071928的博客 1045

qt解决编码问题

QComboBox 提供了一系列方法来添加、删除和修改列表中的项,支持通过索引或文本检索项,并可以通过信号和槽机制来响应用户的选择变化。该控件广泛应用于需要从多个选项中进行选择的用户界面场景,例如表单和设置界面。这些编码覆盖了大部分常用的语言字符集,可以通过 QTextCodec::codecForName() 方法在。使用我们的记事本打开,发现会ANSI格式的会乱码,那是因为 代码里面我们指定了编码类型为 UTF-8。它允许用户从一组选项中选择一个选项,并可以配置为可编辑,使用户能够在其中输入文本。

mx_jun的博客 885

基于STM32的室内环境监测系统设计与实现

摘要 本文设计了一种基于STM32的室内环境监测系统,通过传感器实时采集温湿度、空气质量、烟雾浓度等数据,并利用Wi-Fi模块上传至云服务器。系统采用STM32F103C8T6作为主控芯片,结合DHT11、MQ系列传感器及BMP280气压传感器实现数据采集,通过ESP8266模块实现远程数据传输。用户可通过手机APP实时查看环境参数,并在数据超标时触发报警。实验表明,系统运行稳定,监测精度高,具有低成本、易扩展等特点,为改善室内环境质量提供了有效解决方案。 关键词:STM32;室内环境监测;传感器;Wi-F

3254968421的博客 221

Qt中中文处理-编码格式转换

在Qt中,由于对文本的处理都是采用utf-8(Unicode字符集的一种编码方式),当遇到非utf-8的字符串时,如果不进行转换,常常会出现乱码的情况。比如,当读取一个gbk格式的文件,然后将其显示出来时,如果采用下面的代码进行编写,则会出现显示乱码。

xiongpursuit88的博客 3739

HTML粉色爱心(完整代码)

HTML语言实现粉色爱心的完整代码。

AIGC 1105

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Qt文本编码转换,QTextCodec的简单使用

前言 在处理文本数据的时候,我们经常遇到中文乱码、编码转换等问题,之前学习Qt在VS里也是受尽了中文乱码的折磨。其实,QString和QByteArray自带的几个函数可以解决大部分编码问题,而QTextCodec支持更多类型的编码。 “VS中使用Qt显示中文乱码了!” 最开始遇到乱码问题,是在VS编写Qt程序时。需要将带中文的字符串显示到界面上,于是我直接setText一个QString,...

龚建波 7891

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

create显示中文乱码 qt_Qt的编码问题解决方案(转载)

中文编码一直是个恼人的问题,目前还没有想到一个比较完美的解决方案。姑且先列下出现问题的时机,以及涉及到的问题及症状表述如下。注:当前的本地化设置都是setlocale(LC_CTYPE, "zh_CN.GB2312");QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));QTextCodec::setCodecForCStrings...

weixin_32602727的博客 438

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

QTextCodec中的setCodecForTr等终于消失了 (Qt5)

QTextCodec中的setCodecForTr等终于消失了 (Qt5) 转自 http://blog.youkuaiyun.com/dbzhang800/article/details/7325698 在Qt4中,国内很多新手都喜欢——不分青红皂白地使用如下3行代码 QTextCodec::setCodecForTr(...) QTextCodec::setCode

skykingf的专栏 1534
上一篇: Qt之QTextCodec乱谈
下一篇: JavaScript类型转换 (整型---浮点型)
lixingworkCCC
博客等级 码龄15年 24粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值