在Qt中,QChar是Qt处理字符的基本类型,是对unicode字符的封装。QChar使用2个字节的内存,在其内部维护了一个unsigned short 类型的内存。
QChar(); // 构造一个空字符,即'\0'
QChar(char ch); // 由字符数据ch构造,char类型作为QChar的构造参数时,会被转换为unsigned short,继而可被QChar接管
QChar(uchar ch); // 由无符号字符数据ch构造
QChar(ushort code); // 由无符号短整形数据code构造,code是Unicode编码
QChar(short code); //由 短整形数据code构造,code是Unicode编码
QChar(uint code); // 由无符号整型数据code构造,code是Unicode编码
QChar(int code); // 由整型数据code构造,code是Unicode编码
在Qt中,Unicode字符是没有任何标记或结构的16位实体。此类表示这样的实体。它是轻量级的,因此可以在任何地方使用。大多数编译器将其视为无符号空头。
QChar提供了完整的测试/分类功能,可以转换为其他格式,也可以转换为分解的Unicode格式,如果需要,还可以尝试比较和转换大小写。
分类函数包括标准c++标头<cctype>(以前是<ctype.h>)中的函数,但是操作的是Unicode字符的全范围,而不仅仅是ASCII范围。如果字符是某种类型的字符,它们都返回true;否则返回false。这些分类功能isNull()(返回true,如果字符' \ 0 '),isPrint()(如果是任何类型的可打印字符,包括空格),isPunct()(任何类型的斑点),isMark () (Unicode)、isLetter()(字母),isNumber()(任何形式的数字字符,而不仅仅是0 - 9),isLetterOrNumber(),和isDigit()(小数位数)。所有这些都是围绕category()的包装器,它返回每个字符的unicode定义的类别。其中一些还计算派生属性(例如isSpace()如果字符属于类别分隔符_*或来自Other_Control类别的异常代码点,则返回true)。
QChar还提供了direction(),它指示该字符的“自然”写入方向。joiningType()函数指示字符如何与它的邻居连接(主要用于阿拉伯语或叙利亚语),最后是has(),它指示当字符以“非自然”的书写方向打印时,是否需要镜像字符。
通过使用decomposition(),可以将组合的Unicode字符(比如ring)转换成分解的Unicode(“a”后面跟着“ring above”)。
在Unicode中,比较是不可能的,大小写转换是非常困难的。Unicode覆盖了“整个”世界,也包括世界上的大多数情况和排序问题。操作符==()和好友将纯粹基于字符的数值Unicode值(代码点)进行比较,而toUpper()和toLower()将在字符具有定义良好的大写/小写等价时进行大小写更改。对于依赖于语言环境的比较,使用QString::localeAwareCompare()。
转换函数包括unicode()(转换为标量)、toLatin1()(转换为标量,但将所有非latin -1字符转换为0)、row()(提供unicode行)、cell()(提供unicode单元格)、digitValue()(提供任意数字字符的整数值)和许多构造函数。
QChar提供了构造函数和强制类型转换操作符,这使得转换传统的8位字符变得很容易。如果您定义了QT_NO_CAST_FROM_ASCII和QT_NO_CAST_TO_ASCII,就像QString文档中解释的那样,您将需要显式地调用fromLatin1(),或者使用QLatin1Char,从一个8位的字符构造一个QChar,并且您将需要调用toLatin1()来获取8位的值。
#include <QCoreApplication>
#include <QChar>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
char ch1 = 'h';
QChar ch = 'hh';
qDebug("%x",ch);
qDebug("%x",ch1);
return a.exec();
}
输出结果:
6868
68
参考资料:
1. https://www.cnblogs.com/retry/p/9328715.html
2. Qt helper