Qt学习笔记之QChar

在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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值