我正在尝试解释 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/