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

2023-10-30

  • 在Qt4中,国内很多新手都喜欢——不分青红皂白地使用如下3行代码

QTextCodec::setCodecForTr(...)
QTextCodec::setCodecForCStrings(...)
QTextCodec::setCodecForLocale(...)

尽管之前零零散散写过一点这方面的内容,比如

但是,敢死队员还是一批一批的 ... 让人少多有些无奈

症结?

在国内,之所以用很多人用这3行代码,是因为他们在源代码的const char*这种窄字符串中使用了中文。

然后,发现。不对啊,咋全是乱码呢?于是上网搜索,发现其他人用的这3行代码

于是,加上试试。发现:在自己的当前环境下(固定系统、固定地区语言设置、固定编译环境)还真的没有乱码了。

于是乎?完全不考虑那3行代码的作用了,反正自己能用就行了,管它什么副作用呢!!

Qt5

在Qt5中,这个问题终于不复存在了,因为

这两个函数

QTextCodec::setCodecForTr(...)
QTextCodec::setCodecForCStrings(...)

被直接去掉了。

这样一来,受影响的直接是如下代码了:

QString s1 = "我是中文";
QString s2("我是中文");
QString s3 = QObject::tr("我是中文")

好消息/坏消息?

  • 坏消息

现在Qt5中尽管去掉了setCodecXXX这两个函数,但是默认编码还是latin1。如果你要想使用

"我是中文"

这样的字符串,必须自己使用QTextCodec或这QString::fromXXX 这种东西进行转换

  • 好消息 是:

Qt5发布之时,默认将会是utf8编码,完全可以将你从Qt编码问题解放出来。

  • 坏消息,如果使用的是 MSVC2005/2008/2010,可能无法使用utf8编码,于是

下面的代码

QString s1 = "我是中文";
QString s2("我是中文");
QString s3 = QObject::tr("我是中文")

将不会工作。

  • 因为从MSVC2005起,你无法给编译器设置字符串要使用的编码。尽管2003之前,也无法设置,但是它会遵循源码文件的编码。而2005就自作聪明了,即使你源码文件保存成不带BOM的utf8,它都会试图帮你转换一下。
  • 好消息是什么呢?

如果你在Windows下,且使用的是MinGW,那么只要你将源码文件保存成utf8,前面的代码将直接可以工作(无须其他设置)

如果你在其他平台了,那么应该都默认是utf8文件。同样无须进行设置。

  • 好消息

如果你的编译器支持C++11,那么,你可以直接使用

QString s = u8"我是中文";
  • 坏消息

主流编译器还都不怎么支持C++11

参考


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QTextCodec中的setCodecForTr等终于消失了 (Qt5) 的相关文章

  • 第一次信号发射后自动断开

    我正在从文件加载网页 然后替换其中的一些 html self template web page QtWebKit QWebPage self template web page mainFrame load QtCore QUrl tem
  • QT:删除QGridLayout中QLabel之间的空格

    我将一些具有不同颜色的 QLabels 添加到 QGridLayout 作为 QWidget 的布局 现在我在每个 Qlabel 与下一个 Qlabel 之间有一个间距 我想将其删除 我尝试将标签的边距设置为 0 将 GridLayout
  • 获取 QListView 中所有可见项目的简单方法

    我正在尝试使用 Qt Framework 开发一个图像库应用程序 应用程序从所选文件夹加载所有图像 并使用 QListView 控件显示这些图像 但现在我想通过仅加载用户可见的图像来减少内存消耗 由于没有直接函数来获取视图中的所有可见项目
  • 如何在QT上暂停和重新启动Qtimer

    我有 Ubuntu 我正在使用 IDEQT on C 我将暂停和恢复计时器 例如 void Ordonnancer les taches on pushButton clicked connect dataTimer SIGNAL time
  • Retina 显示屏中具有 QOpenGLWIdget 的 Qt MainWindow 显示错误大小

    我有一个 Qt 应用程序MainWindow 我嵌入一个QOpenGLWidget在里面 一切正常 直到我开始使用 Apple Retina 显示屏并在高 DPI 模式下运行我的应用程序 我的QOpenGLWidget只是它应该具有的大小的
  • 如何声明一个带有成员函数指针的函数

    我有一个类 其中的成员变量指向库对象 class myClassA private libraryClass libraryObject 该库类发出事件 以字符串为特征 并提供一种机制 允许客户端类指定在发出事件时应调用的成员函数 因此在m
  • 使用 OpenGL 渲染 QImage

    与我相关的其他问题 https stackoverflow com questions 20126354 render qimage from sooffscreenrenderer in qglwidget 我认为更核心的问题是 如何渲染
  • Qt 嵌入式触摸屏 QMouseEvents 在收到 MouseButtonRelease 之前未收到

    我在带有触摸屏的小型 ARM 嵌入式 Linux 设备上使用 Qt 4 8 3 我的触摸屏配置了 tslib 并对其进行了校准 因此 etc 中有一个 pointcal 文件 我的触摸事件的位置工作得很好 但无论如何我都会在鼠标按下或鼠标释
  • Qt中Q_PROPERTY的意义是什么?

    我无法理解 Q PROPERTY 的用法 Q PROPERTY 如何帮助程序具有防御性 它是干什么用的 我看过这个论坛 但确实无法应用 我已经理解了这个例子 但不明白它的用法 这是一个例子 我能从中得到什么 我知道阅读将赋予只读特权 wri
  • 针对初学者的 QT 商业许可证与非商业许可证 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 QT 许可似乎非常反学习 因为据我所知 用它开发的任何东西都只能是商业的当且仅当 its entire开发是在使用商业许可证的情况下完成的
  • Qt 5.1.1 与 Visual Studio 2012 - 这些 QT 版本无法访问

    打开 Visual Studio 时出现此错误 我安装自http qt project org downloads http qt project org downloads 适用于 Windows 64 位的 Qt 5 1 1 VS 20
  • Qt QML 数据模型似乎不适用于 C++

    我一直在使用中的示例http doc qt digia com 4 7 qdeclarativemodels html http doc qt digia com 4 7 qdeclarativemodels html这是 QML 声明性数
  • 使用 QGraphicsScene 实现流畅的动画

    我希望我的问题并不总是同样的问题 我有一个 QGraphicsScene 它的项目是一些 QGraphicsPixmap 我用一个计时器来移动它们 每秒 SetX 10 我设置 10是因为窗口大100 使用这个解决方案我的动画不流畅 我想我
  • 即使我在单独的线程中运行,QT GUI 也会冻结

    我有一个小型聊天应用程序 其中使用 SQLite 数据库来存储所有对话 我注意到该应用程序随机冻结 然后我必须最小化和最大化它才能使其再次工作 我认为问题可能是 SQLite 选择 插入导致 gui 冻结 我决定尝试将所有 SQLite 方
  • QFileSystemModel setRootPath

    我正在尝试创建一个 Qt 应用程序来显示文件夹 Mac OS 中的 Users 文件夹 的内容 这是代码 QFileSystemModel dirModel new QFileSystemModel dirModel gt setRootP
  • QML 列表视图拖放

    我想创建两个 qml 列表视图 可以执行两个功能 拖放一个列表中的项目以更改项目的顺序 跨列表拖放项目 项目将从一个列表中删除并添加到另一个列表中 根据 Qt 文档中的拖放示例 我决定创建两个访问同一列表模型的列表视图 列表模型中的每个项目
  • Q风格所有权

    在 Qt 应用程序中使用样式时 我遇到了一个有趣的问题QStyle所有权 QStyle继承自QObject 通常接受QObject parent作为构造函数参数来管理其子级的生命周期 但QStyle的构造函数没有此构造函数参数 第一个问题
  • Linux 上的静态 Qt5 构建:部署时如何处理字体?

    我使用这些配置选项创建了 Qt 5 2 0 库的静态版本 Ubuntu 12 04 开源 确认许可 force pkg config 发布 静止的 前缀 home juzzlin qt5 无icu opengl桌面 无油嘴滑舌 辅助功能 n
  • 为什么动态 qml 对象的创建如此缓慢,有哪些合理的替代方案?

    我想要实现的目标类似于棋盘游戏 有一个100 100的网格 放在一个Item它驻留在一个Flickable 游戏板 的各个矩形都是 svg 图像 目前大约有 20 种 可能会增加到数百种 作为基准测试 我只是尝试用元素填充 世界 Compo
  • QML MouseArea 将事件传播到按钮

    我正在开发一个应用程序 其菜单类似于 Android 版 Gmail 收件箱应用程序菜单 基本上 当您按下按钮打开菜单时 它就会滑入视图 用户可以将其滑开或按菜单上的按钮 对于滑动我使用了代码SwipeArea from kovrov ht

随机推荐

  • Unity:在Android平台发布

    1 文件 生成设置 平台 Android 单击切换平台 添加已打开场景 2 编辑 首选项 外部工具 直接全部勾选 3 文件 生成设置 玩家设置 公司名称 产品名称必填 默认图标为生成的app的图标 若使用EasyAR 需注意包名需要与Eas
  • 【SpringMVC】轻量级Web之MVC架构框架

    一 SpringMVC简介 一 SpringMVC学习目标 二 SpringMVC概述 三 SpringMVC快速入门 四 启动服务器初始化过程 五 Controller加载控制与业务bean加载控制 六 简化Servlet容器开发 二 设
  • 关于bash数组的几道面试笔试题—航班延误5h的郁闷都在此文

    数组作为最常使用和最基本的数据结构存在于各种编程语言中 但各语言里数组的定义 使用以及对应的属性方法各不相同 本文将从面试的角度出发 带领大家一同走近那个最熟悉又陌生的Bash Array re 1 如何定义一个包含多种数据类型元素的数组
  • URL地址的两种格式

    1 传统格式 格式 scheme host port path query fragment scheme 协议 例如http https ftp等 必写 host 域名或IP地址 必写 port 端口号 http 默认端口为 80 可以省
  • React中使用百度地图

    1 找到百度地图首页 进入百度地图开放平台 地址如下 百度地图开放平台 百度地图API SDK 地图开发 2 找到开发文档中react BMapGL 如上图所示 我们进入React BMapGL JSAPI 地址如下 React BMapG
  • 超详细 Ubuntu安装PyTorch步骤

    目录 STEP1 进入PyTorch官网查看安装版本和指令 STEP2 为PyTorch单独创建conda环境 STEP3 进入STEP2中创建的conda环境 STEP4 输入STEP1中的安装指令安装PyTorch STEP5 安装Ju
  • CSS层叠上下文、层叠等级、层叠顺序、z-index

    一个 片面 的理解 以往 由于自己使用z index的频率不大 所以对这个CSS属性存在比较片面的认识 一直认为z index就是用来描述定义一个元素在屏幕Z轴上的堆叠顺序 z index值越大在Z轴上就越靠上 也就是离屏幕观察者越近 最后
  • yarn、pnpm 的常用命令

    yarn 下载 npm i yarn g 查看版本 yarn version yarn v 初始化 package json yarn init yarn init y 下载包 yarn add axios 默认生产环境 yarn add
  • 【100%通过率 】【华为OD机试c++/java/python】MVP争夺战【 2022 Q4 A卷

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 在星球争霸篮球赛对抗赛中 最大的宇宙战队希望每个人都能拿到MVP MVP的条件是单场最高分得分获得者 可以并列所以宇宙战队决定在比赛中尽可能让更
  • 1148.最大值

    include
  • Leetcode 刷题笔记(五) —— 链表篇之链表的基础操作和经典题目

    文章目录 系列文章目录 1 链表基本操作 707 设计链表 2 双指针迭代法 203 移除链表元素 206 反转链表 24 两两交换链表中的节点 3 双指针之快慢指针 19 删除链表的倒数第 N 个结点 160 相交链表 141 环形链表
  • Spring Boot CLI安装及快速入门示例

    Spring Boot CLI安装 Spring Boot是一个命令行工具 用于使用Spring进行快速原型搭建 它允许你运行Groovy脚本 这意味着你可以使用类Java的语法 并且没有那么多的模板代码 你没有必要为了使用Spring B
  • jpa|springboot|informix自定义SQL,条件判断

    jpa连mysql没什么说的 但是jpa连informix真的坑到家了 各种函数不支持 需求 在自定义sql的时候 需要判断参数是否为空 如果参数为空则不参与sql条件判断 就这么简单的一个需求 如果是jpa连mysql 那就用几个if判断
  • This application has no explicit mapping for /error, so you are seeing this as a fallback.

    Whitelabel Error Page This application has no explicit mapping for error so you are seeing this as a fallback Mon Nov 23
  • 矩阵打印(python实现)

    之前面试嵌入式软件的一道题 用c实现矩阵打印 考场上并没有写出来 之后总感觉自己写不出来也就没有去实现 在网上找也没能找到答案 结果这问题一直悬在脑海里 这才静下来想了想 发现并不难 便打算用python来实现 同时也是学习python之路
  • 基于PyTorch机器学习与深度学习实践应用与案例分析

    近年来 随着AlphaGo 无人驾驶汽车 医学影像智慧辅助诊疗 ImageNet竞赛等热点事件的发生 人工智能迎来了新一轮的发展浪潮 尤其是深度学习技术 在许多行业都取得了颠覆性的成果 另外 近年来 Pytorch深度学习框架受到越来越多科
  • azure 测试服务器性能,测试 Azure VM 网络吞吐量

    您现在访问的是微软AZURE全球版技术文档网站 若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站 请访问 https docs azure cn 带宽 吞吐量测试 NTTTCP 10 06 2020 本文内容 在
  • Python实现动态绘制爱心

    效果 源码 https download csdn net download x q x 87246985
  • 各种系统架构图及其简介

    各种系统架构图及其简介 转载请保留出处 不胜人生一场醉汇总 以下文字和架构图均在本人相关系统设计和架构方案中有所应用 原文出处 http space itpub net 6517 viewspace 609654 1 Spring架构图 S
  • QTextCodec中的setCodecForTr等终于消失了 (Qt5)

    在Qt4中 国内很多新手都喜欢 不分青红皂白地使用如下3行代码 QTextCodec setCodecForTr QTextCodec setCodecForCStrings QTextCodec setCodecForLocale 尽管之