QT 中文乱码 以及 tr 的使用

一、关于显示中文

        1、网上常规的做法

- 第一步:代码文件选择用utf8编码带bom。QT Creator 文本编辑 行为配置里可以配置
- 第二步:在有中文汉字的代码文件顶部加一行(一般是cpp文件) #pragma execution_character_set("utf-8") 可以考虑放在head.h中,然后需要的地方就引入head头文件就行,而不是这行代码写的到处都是;这行代码是为了告诉msvc编译器当前代码文件用utf8去编译。
- 第三步:main函数中加入设置编码的代码,从Qt5开始默认就是utf8编码。
```cpp
void QtHelper::setCode()
{
    QTextCodec *codec = QTextCodec::codecForName("utf-8");
    QTextCodec::setCodecForLocale(codec);
}

        2、我个人习惯 直接在中文字符串出指定格式,,也是没问题的

                QString(u8"哈哈哈")

        3、关于tr 误用,,经常可能 这样使用: tr(u8"哈哈哈"); 这是错误的用法,如果不用翻译,应该用QString,,,如果要翻译,理论上也是包含英文,然后提供中文翻译包。。实际上这样使用 linguist 是不会识别到这个字符串的,,除非把u8 去掉,但是去掉会乱码

        4、如果 一个项目,事先都是用的中文,突然要做国际化,太多地方使用了 tr(u8"哈哈哈"),,,界面也是中文,,不想全部改为英文,然后提供翻译包的话,,,把 tr(u8"哈哈哈"), 改为 

tr(u8R"(哈哈哈)"),R 是 C++11 的 原始字符串字面量 标识,linguist也能识别到且不会乱码。 这样就是源码中文,提供英语翻译包。。。

        5、关于 全局变量 翻译的问题

                a、第一种 ,直接宏定义   (个人认为更方便)                

                        #define RESET QObject::tr(u8R"(整机复位)") 

                        ui->label->setText(RESET); //实际相当于运行期间调用QObject::tr()

                b、如果是定义的常量 ,则需要使用 translate() 函数

                        const QString RESET = QObject::tr(u8R"(整机复位)"); //任然使用 tr ,是为了让linguist 能识别 生成翻译

                        ui->label->setText(qApp->translate("QObject", RESET .toStdString().c_str())); //注意点是。前面的上下文一定要正确,,因为定义是用的QObject::tr() 全局函数,所以上下文在"QObject", 如果是直接用的 tr() ,上下文可能就是在定义所在文件,,具体可以在lingguist 生成的文件里查看。

       6、知道了上面translate 的用法,则对于某些情况 待翻译文本 是由代码生成默认文本并存放在配置文件中的, 运行时读取显示,两种做法

                a、如果该配置很固定,不能随便增删,不对要翻译的原始文本做修改,则可以使用上述方法,将要翻译的字段使用tr 包裹,使其可以被识别翻译,然后读取文件使用字段时,使用translate() 函数处理 。  (不灵活,不推荐)

                b、更推荐的做法还是,直接配置里就做好翻译,读取时选对应的语言版本

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/29247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器新硬盘分区、格式化和挂载

文章目录 参考文献查看了一下起点现状分区(base) ~ sudo parted /dev/sdcmklabel gpt(设置分区类型)增加分区 格式化需要先退出quit(可以)(base) / sudo mkfs.xfs /dev/sdc/sdc1(失败)sudo mkfs.xfs /dev/s…

通过nginx转发后应用偶发502bad gateway

序言 学习了一些东西,如何才是真正自己能用的呢?好像就是看自己的潜意识的反应,例如解决了一个问题,那么下次再碰到类似的问题,能直接下意识的去找到对应的信息,从而解决,而不是和第一次碰到一样…

softmax的数值溢出问题

softmax是deep learning常用的一个操作,虽然有很多现成的包可以调,但在某些场景下需要自己实现。本文简单探讨一下softmax可能会出现的数值稳定性问题 解决上溢出问题 Softmax ( x i ) exp ⁡ ( x i ) ∑ j 1 N exp ⁡ ( x j ) exp ⁡ ( x i ) / exp…

CRC循环冗余校验

CRC循环冗余校验 循环冗余校验码是一种用在数字网络和存储设备上的差错校验码,可以校验原始数据的偶然差 错。 CRC 计算单元使用固定多项式计算 32 位 CRC 校验码。 1. 硬件CRC 在单片机中,芯片具有专用的CRC计算单元,它是按照32位数据长…

LeetCode 48.旋转图像

1.做题要求: 2.从此题我们可以看出规律为第几行要变为倒数第几列,所以我们最好先把二维数组存入一维数组中,然后先从最后一列遍历,把一维数组里的元素,依次等于遍历的元素即可: void rotate(int** matrix, int matrixSize, int*…

RunMe_Aobut TC103848_UEFIShellFactoryDiagnostics.nsh

:: ***************************************************************************************************************************************************************** :: 20240617 :: 该脚本可以用于BIOS Case TC103848测试,功能包括:在EFIShell环境下运行…

Scala函数

文章目录 一、第1关:方法S 三角形 ​实验代码: 二、第2关:Scala函数以及函数调用实验代码: 一、第1关:方法 任务描述 本关任务:根据三角形的三边长 a、b、c,返回三角形的面积。 任意三角形面积…

外网怎么访问内网?

当我们需要在外网环境下访问内网资源时,常常会面临一些困扰。通过使用一些相关的技术与工具,我们可以轻松地实现这一目标。本文将介绍如何通过【天联】组网产品,解决外网访问内网的问题。 【天联】组网是一款由北京金万维科技有限公司自主研…

JAVAFX打包部署真正能用的办法(jdk21,javafx23)IntelliJ IDEA

我之前创建了javafx项目,想打包试试。一试,全是坑,所以记录下来,为有缘人节约时间。直接构建工件是错误的,别尝试了,找不在JDK的。我也花了一天多的时间尝试了网上各种大神的办法,就没找到一个是…

算法 Hw9

Hw 9 1 Scheduling with profits and deadlines12345 2 Parallel machine1234 1 Scheduling with profits and deadlines 1 决策问题表述: 给定一个利润值 P P P,是否存在一个任务调度方案使得完成所有任务的总利润至少为 P P P 2 在 NP 类中&…

stm32学习-软件I2C读取MPU6050

接线 SDAPB11SCLPB10 I2C 对操作端口的库函数进行封装 void MyI2C_W_SCL(uint8_t BitValue)//写 {GPIO_WriteBit(GPIOB, GPIO_Pin_10, (BitAction)BitValue);Delay_us(10); }void MyI2C_W_SDA(uint8_t BitValue)//写 {GPIO_WriteBit(GPIOB, GPIO_Pin_11, (BitAction)BitValu…

Redis 7.x 系列【4】命令手册

有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 说明2. 命令手册2.1 Generic2.2 数据类型2.2.1 String2.2.2 Hash2.2.3 List2.2.4 S…

docker入门——镜像命令、容器命令及其他常用命令

镜像命令 dockers images [-a | -q] 查看镜像 -a: 显示所有细腻些 -q: 只显示镜像ID docker search [–filter]搜索命令 –filter字段值 docker pull 镜像名[:tag] 下载镜像不加tag默认下载最新镜像 docker rmi [options] 删除镜像 ​ -f 容器ID [,容器ID,容…

如何在纯内网环境下,将EasyCVR视频汇聚网关通过4G与第三方公网云平台级联?

EasyCVR视频汇聚网关是TSINGSEE青犀软硬一体的一款产品,可提供多协议的接入、音视频采集、处理,能实现海量前端设备的轻量化接入/转码/分发、视频直播、云端录像、云存储、检索回看、智能告警、平台级联等,兼容多种操作系统,轻松扩…

HTTP/2 协议学习

HTTP/2 协议介绍 ​ HTTP/2 (原名HTTP/2.0)即超文本传输协议 2.0,是下一代HTTP协议。是由互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis (httpbis)工作小组进行开发。是自1999年http1.1发布后的首个更新。…

速盾:海外网站cdn加速免费

随着互联网的快速发展和全球化的趋势,海外网站的重要性也日益增加。然而,由于地理位置等各种因素的限制,海外访问海外网站的速度往往较慢,给用户的体验带来了不便。为了解决这个问题,许多网站开始采用CDN加速技术。 C…

HTML 实体字符简介

在网页设计与开发中,HTML 实体字符扮演着重要的角色,它们帮助我们在HTML文档中安全地插入特殊字符,避免浏览器解析时产生错误或意外的布局效果。实体字符通过特定的编码方式来表示,使得浏览器能够正确识别并展示这些特殊字符。下面…

在云服务器上安装配置和调优Zerotier服务器的详细教程

Hey,朋友们!今天我要在服务器上部署和调优Zerotier服务器。使用三丰云提供的免费服务器,配置为1核CPU、1G内存、10G硬盘和5M带宽。虽然配置不高,但三丰云的免费云服务器已经足够应付我们今天的项目。👍 Zerotier服务器…

阻塞锁和自旋锁的理解

阻塞锁和自旋锁的理解 文章目录 阻塞锁和自旋锁的理解阻塞锁自旋锁阻塞锁自旋锁各自的优缺点自旋锁阻塞锁 选择自旋锁还是阻塞锁 想象你和你的朋友们一起玩一个游戏,但是每次只能一个人玩。为了决定谁先玩,你们可以用两种方法来排队: 阻塞锁…

小程序-生命周期(2) 应用周期/页面周期

一.应用周期 应用周期指的是小程序:启动->运行->销毁的整个过程。 应用周期伴随一些函数来进行控制,这些函数卸载app.js里面的App方法里。 分别由onLaunch, onShow,onHide依次进行。 onLaunch:初始化的时候运行…