前端网站页面模板,外链博客网站,电烤箱做蛋糕网站,策划书word模板QChar
在Qt中#xff0c;Unicode字符是没有任何标记或结构的16位实体。QChar表示这样的实体。它是轻量的#xff0c;因此可以在任何地方使用。大多数编译器将其视为unsigned short。
QChar 提供了构造函数和强制转换运算符与传统的8位字符进行转换。如果定义了QT_NO_CAST_F…QChar
在Qt中Unicode字符是没有任何标记或结构的16位实体。QChar表示这样的实体。它是轻量的因此可以在任何地方使用。大多数编译器将其视为unsigned short。
QChar 提供了构造函数和强制转换运算符与传统的8位字符进行转换。如果定义了QT_NO_CAST_FROM_ASCII和QT_NO_CAST_TO_ASCIIchar则需要显式调用fromLatin1()或使用QLatin1Char()从8位构造QChar并且需要调用toLatin1()来获取8位字符。
QChar的定义内部只保存了一个ushort类型的成员变量ucs其它都是属性和方法。
class Q_CORE_EXPORT QChar {
public://....Q_DECL_CONSTEXPR QChar() noexcept : ucs(0) {}Q_DECL_CONSTEXPR QChar(ushort rc) noexcept : ucs(rc) {} // implicitQ_DECL_CONSTEXPR QChar(uchar c, uchar r) noexcept : ucs(ushort((r 8) | c)) {}//....
private://....ushort ucs;
};QString在构造时调用QTypedArray的allocate函数将返回的地址赋值给指针d。data()返回ushort *类型指针对指针进行[]运算符结果进行初始化相当于从data()返回地址开始构造一个数组每一个元素存储一个QChar即unsigned short。
template class T
struct QTypedArrayData: QArrayData
{ //......T *data() { return static_castT *(QArrayData::data()); }
};
typedef QTypedArrayDataushort QStringData;
typedef QStringData Data;
Data* d;
QString::QString(QChar ch)
{d Data::allocate(2);Q_CHECK_PTR(d);d-size 1;d-data()[0] ch.unicode();d-data()[1] \0;
}char
char是C的基本字符类型用于存储 ASCII 字符。QString采用UTF-16编码将传入的char*字符串参数当作UTF-8格式进行转换。 以const char *为参数的拷贝赋值运算符调用了fromUtf8()fromUtf8()返回QString再调用以const QString 的拷贝赋值运算符浅拷贝d指针。
inline QT_ASCII_CAST_WARN QString operator(const char *ch){ return (*this fromUtf8(ch)); }以const char *为参数的构造函数调用了fromAscii_helper()fromAscii_helper()返回d指针拷贝。
inline QT_ASCII_CAST_WARN QString(const char *ch): d(fromAscii_helper(ch, ch ? int(strlen(ch)) : -1)) {}QString::Data *QString::fromAscii_helper(const char *str, int size)
{QString s fromUtf8(str, size);s.d-ref.ref();return s.d;
}static inline QString fromUtf8(const char *str, int size -1)
{return fromUtf8_helper(str, (str size -1) ? int(strlen(str)) : size);
}QByteArray
[ref|size|alloc|reserve|offset|Byte|Byte|Byte|...]QByteArray 可用于存储原始字节包括“\0”和传统的 8 位“\0”结尾字符串。使用 QByteArray 比使用const char *更方便。QByteArray 始终确保数据后跟一个“\0”终止符并使用写入时复制来减少内存使用量并避免不必要的数据复制。
除了QByteArray之外Qt还提供了存储字符串数据的类QString。在大多数情况下使用QString将其内容理解为 Unicode 文本使用 UTF-16编码其中 QByteArray 旨在避免对其存储的字节的编码或语义进行假设除了一些使用 ASCII 的传统情况。此外在Qt API中始终使用QString。QByteArray 适用的两种主要情况是需要存储原始二进制数据时以及内存保护至关重要时例如使用 Qt for Embedded Linux。
初始化 QByteArray 的一种方法是简单地将const char *传递给其构造函数。
QByteArray 通常将数据作为字节处理而不假定任何语义在假定语义的情况下它使用 C 语言环境和 ASCII 编码。QString支持标准的Unicode编码其他编码可能支持使用QStringEncoder和QStringDecoder 转换为Unicode。对于特定于区域设置的文本解释请使用QLocal或QString。
在QByteArray的定义中可以知道QByteArray和QString类似使用类模板QTypedArrayData类型的指针d管理数据模板实参为char采用“隐式共享”的机制减少不必要的拷贝。
class Q_CORE_EXPORT QByteArray
{
private:typedef QTypedArrayDatachar Data;
public://......
private:Data *d;//......
};d指针返回的对象为char *的指针指向为字节数组的开始地址通过[]运算符对字节数组赋值。
QByteArray QByteArray::append(char ch)
{if (d-ref.isShared() || uint(d-size) 2u d-alloc)reallocData(uint(d-size) 2u, d-detachFlags() | Data::Grow);d-data()[d-size] ch;d-data()[d-size] \0;return *this;
}