c++ - QT 4 <->QT 5 编码

标签 c++ qt

我正在尝试解释 QT4 和 QT5 的使用。该系统同时使用这两个版本,但它们位于共享通用文件的不同产品中。

我找到了一个可行的解决方案,但它每次都必须进行版本检查,我想找到一种方法来实现“一种编码适用于两种”的情况。

我目前的解决方案是这样的,以微符号 (µ) 为例。

QT 4 编码只需要字节中的一个半字节,在本例中是 (\xb5)

Qt 5 需要整个字节 (\xc2\xb5)。

我也尝试过使用 C++ 代码 (\u00B5),但它产生了 È 1/4

C++

#include <QtCore/QtGlobal>
#if QT_VERSION >= 0x050000
print out a QString with the code \xc2\xb5
#else
print out a QString with the code \xb5
#endif

是否有更好的方法来避免版本检查?我有大约 50 个这样的支票我想取消。

最佳答案

问题是,默认情况下,Qt4 中的 QString 在使用 char*const char* 参数时,会将它们视为 ASCII字符串(参见 the docs ),而在 Qt5 中它们是 UTF-8 字符串( the docs )。所以你认为“只需要字节中的一个半字节”实际上是“需要字符的 ASCII 值”。 µ 字符在 Latin1 中的代码为 0xB5,这是 Qt4 的 ASCII 的默认代码页。 C2 B5 是该字符对应的代码点的 UTF-8 表示。

所以你真正需要做的是避免构造函数QString::QString(const char*),而是使用QString::fromUtf8明确地。

关于c++ - QT 4 <->QT 5 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57079848/

相关文章:

c++ - Qt:类中变量的默认值

c++ - 为什么可以从 QWidget 创建对象而无需将其包含在 C++ 程序的开头

c++ - 调整 QGraphicsScene 大小时的事件

c++ - 带有 LVS_OWNERDATA 标志的 ListView

c++ - 创建一个新的基 CDialogEx 派生类

未调用 C++ 构造函数

c++ - 在基类中设置一些值后,可以设置指向派生类的指针吗?

c++ - 基类 'class A' 应在复制构造函数中显式初始化

c++ - 不紧凑的指针类型将 int 传递给 coretelephony obj c 中 void(*)(void) 类型的参数

windows - OpenSSL 和多线程