「C++ Qt6 开发」QChar 常用功能测试
1 QChar
1.1 QChar 简介
QChar 是 Qt 框架中的一个类,用于表示 Unicode 字符。它是 Qt 字符处理的基础,类似于 C++ 中的 char 或 wchar_t,但不同的是,QChar 类内部用 2 个字节 的 Unicode 编码来表示一个字符。
1.2 QChar 功能
下面为你介绍Qt中QChar
类的主要接口函数及其功能:
函数原型 | 功能描述 |
---|---|
构造函数 | |
QChar() |
默认构造函数,创建一个空字符(即Unicode值为0的字符)。 |
QChar(ushort code) |
通过Unicode码点值构造字符。 |
QChar(char16_t code) |
通过UTF-16码点构造字符(C++11及以上)。 |
QChar(char32_t code) |
通过UTF-32码点构造字符(C++11及以上)。 |
属性判断 | |
bool isNull() const |
判断字符是否为空(Unicode值为0)。 |
bool isSpace() const |
判断字符是否为空白字符(如空格、制表符、换行符等)。 |
bool isDigit() const |
判断字符是否为数字(‘0’-‘9’)。 |
bool isLetter() const |
判断字符是否为字母。 |
bool isLetterOrNumber() const |
判断字符是否为字母或数字。 |
bool isUpper() const |
判断字符是否为大写字母。 |
bool isLower() const |
判断字符是否为小写字母。 |
bool isPrint() const |
判断字符是否为可打印字符。 |
大小写转换 | |
QChar toUpper() const |
返回字符的大写形式。 |
QChar toLower() const |
返回字符的小写形式。 |
bool toUpper() |
将字符转换为大写形式,成功返回true。 |
bool toLower() |
将字符转换为小写形式,成功返回true。 |
编码转换 | |
ushort unicode() const |
返回字符的Unicode码点值。 |
char toLatin1() const |
返回字符的Latin-1(ISO 8859-1)表示,超出范围时返回0。 |
QString toUcs4() const |
返回字符的UCS-4表示(作为单元素的QString)。 |
比较操作 | |
bool operator==(QChar other) const |
判断两个字符是否相等。 |
bool operator!=(QChar other) const |
判断两个字符是否不相等。 |
bool operator<(QChar other) const |
比较两个字符的Unicode值大小。 |
其他功能 | |
static QChar fromLatin1(char c) |
从Latin-1字符创建QChar对象。 |
static QChar fromUcs4(uint code) |
从UCS-4码点创建QChar对象(处理超出基本多文种平面的字符)。 |
QString toString() const |
将字符转换为单字符的QString。 |
2 QChar 功能测试
2.1 显示字符串每个字符的 unicode
slot 函数如下:
1 |
|
2.2 显示单个字符的特性
slot 函数如下:
1 |
|
2.3 QChar 字符与 Latin1 字符的转换
Latin1(ISO 8859-1) 是单字节编码,覆盖 0-255 的字符范围,包含基本 ASCII(0-127)和扩展西欧字符(128-255)。
-
QChar 转换为 Latin1
char toLatin1() const
返回QChar的 Latin1 表示。若字符超出 Latin1 范围(0-255),返回’\0’(值为 0)。1
2
3
4
5
6
7QChar c1 = 'A'; // Unicode 65 → Latin1 65 ('A')
QChar c2 = QChar(225); // Unicode 225 (ε) → Latin1 225 (α)
QChar c3 = QChar(1000); // 超出Latin1范围 → 返回 '\0'
char latin1_c1 = c1.toLatin1(); // 'A'
char latin1_c2 = c2.toLatin1(); // 'α'
char latin1_c3 = c3.toLatin1(); // '\0' -
Latin1 转换为 QChar
1
2
3
4
5char latinChar = 'B'; // ASCII 'B' (66)
QChar unicodeChar = QChar::fromLatin1(latinChar); // Unicode 66 ('B')
char extendedChar = 233; // Latin1 233 (é)
QChar accentedChar = QChar::fromLatin1(extendedChar); // Unicode 233 (é)
功能测试 slot 函数如下:
1 |
|
2.4 QChar 字符与 UTF-16 字符的转换
QChar 是用于表示 Unicode 字符的类,内部使用 UTF-16 编码。
-
QChar 对应一个 UTF-16 编码单元(16 位值)。
-
Unicode 字符分两种情况:
-
BMP 字符(码位 ≤ 0xFFFF):1 个 QChar 表示。
-
非 BMP 字符(码位 > 0xFFFF,如表情符号):需 2 个 QChar(代理对)。
-
-
数值 →
QChar
1
2ushort utf16Value = 0x4E2D; // "中" 的 UTF-16 编码
QChar ch(utf16Value); // 直接构造 -
QChar
→ 数值1
ushort value = ch.unicode(); // 获取 UTF-16 编码值
-
代理对转换(非 BMP 字符)
- 32 位码位 → 代理对(两个
QChar
)
1
2
3
4
5
6
7
8
9uint codePoint = 0x1F600; // 😀 的码位
// 检查是否需要代理对
if (codePoint > 0xFFFF) {
QChar high = QChar::highSurrogate(codePoint); // 高代理
QChar low = QChar::lowSurrogate(codePoint); // 低代理
QString str;
str.append(high).append(low); // 组合成字符串
}- 代理对 → 32 位码位
1
2
3
4
5
6
7
8QString str = u"😀"; // 包含两个 QChar(代理对)
if (str.length() == 2) {
QChar high = str[0];
QChar low = str[1];
if (high.isHighSurrogate() && low.isLowSurrogate()) {
uint codePoint = QChar::surrogateToUcs4(high, low); // 0x1F600
}
} - 32 位码位 → 代理对(两个
功能测试 slot 函数如下:
1 |
|
2.5 QChar 字符的比较和替换
QChar支持标准比较运算符,基于 Unicode 码点值进行比较:
1 |
|
功能测试 slot 函数如下:
1 |
|
参考
《Qt 6 C++ 开发指南》
「C++ Qt6 开发」QChar 常用功能测试
https://marisamagic.github.io/2025/07/24/20250723/