0、说明
区别于QByteArray,QString串是Unicode串,每个元素都是QChar 16-bit UTF-16编码(Unicode) ;而QByteArray是8-bit串。
0.1、初始化
①const char *
const char *以‘\0‘为串终止符。
QString str = "Hello";
②QChar [ ]
static const QChar data[4] = { 0x0055, 0x006e, 0x10e3, 0x03a3 }; QString str(data, 4);
QString对QChar进行了深拷贝——产生一个副本;区别于浅拷贝——产生一个指针。
如果不想深拷贝,可以用QString::fromRawData()。
③先用resize()设置大小,再每个位置填充QChar
QString str; str.resize(4); str[0] = QChar(‘U‘); str[1] = QChar(‘n‘); str[2] = QChar(0x10e3); str[3] = QChar(0x03a3);
0.2、访问元素
①str[ i ]
这种用的最多,这里不在多说
②str.at( i )
用于只读访问,比[ ]更快。
③left()、right()、mid()
提取部分子串
0.3、‘\0‘
可以在QString中间嵌入‘\0‘,size()会返回整个QString的大小,包括中间嵌入的‘\0‘,但是不包括结尾的‘\0‘。
0.4、resize()
调用resize()方法可以为QString重分配控件,多出来的空间中的字符值是Undefined。可以用fill()函数来填充这些字符。
0.5、操作 字符、子串
相关方法有append()、prepend()、insert()、replace()、remove(),这些方法我已经在QByteArray中说过了,这里就不再多说了。
0.6、容量
如果我们想逐步向QString添加、移除字符,并且大致知道QString将要保留多少字符,可以调用reverse()来为QString预分配指定大小的内存。也可以通过capacity()来搞清楚该QString究竟有多少空间。
0.7、空白字符去除 trimmed()与simplified()、替换 replace()、查看子串位置 indexOf()与lastIndexOf()、大写小写 toUpper()与toLower()、与其它类型相互转换 toxxx()、contains()、count()、data()、constData()、比较运算符
这些用法都和QByteArray中相关方法的用法相同,这里就不再多说了。
0.8、8-bit串与Unicode串间的转换
QString有3种转换为QByteArray的方法:
- toLatin1() 返回Latin-1 (ISO 8859-1) 编码的8-bit 串.
- toUtf8() 返回 UTF-8 编码的8-bit 串.
- toLocal8Bit() 返回系统本地编码的8-bit 串 。
从这些QByteArray转换为QString: fromLatin1(), fromUtf8(), and fromLocal8Bit()。
其他的编码方法通过QTextCodec类实现的。
1、模块和加载项
Header: | #include <QString> |
qmake: | QT += core |
2、构造
QString(QByteArray ba) | |
QString(const char *str) | |
QString(QString other) | |
QString(QLatin1String str) | |
QString(int size, QChar ch) | 构造一个大小为size,所有字符都为ch的串 |
QString(QChar ch) | 构造只包含单个字符ch的串 |
QString(const QChar *unicode, int size = -1) | |
QString() |
4、实例方法
返回值类型 |
方法 |
说明 |
QString & |
operator=(QByteArray ba) operator=(QString other) |
|
QString & |
append(QString str) append(QChar ch) append(const QChar *str, int len) append(QLatin1String str) append(QStringView str) append(const char *str) append(QByteArray ba) |
在末尾添加 |
QString | arg(QString a1, QString a2, ..., QString a9) | 用arg中的参数填充字符串中的%1、%2、...、%n |
const QChar | at(int position) | 提取指定位置处的字符 |
QChar | back() | 末尾字符 |
QString::iterator | begin() | 迭代器,指向开头 |
int | capacity() | 最大容量 |
void | chop(int n) | 移除末尾n个字符 |
QString | chopped(int len) | 移除末尾n个字符,并返回 |
void | clear() | 清空String并置null |
int |
compare(QString other, Qt::CaseSensitivity cs = Qt::CaseSensitive) compare(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) |
比较 |
bool |
contains(QString str, Qt::CaseSensitivity cs = Qt::CaseSensitive) contains(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) contains(QRegExp rx) contains(QRegularExpression re) |
是否包含字符、子串 |
int |
count(QString str, Qt::CaseSensitivity cs = Qt::CaseSensitive) count() count(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) count(QRegExp rx) count(QRegularExpression re) |
统计字符、子串的数量 |
QChar * | data() | QString转QChar * |
QString::iterator | end() | 迭代器,指向莫为元素 |
bool |
endsWith(QString s, Qt::CaseSensitivity cs = Qt::CaseSensitive) endsWith(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) |
是否以指定字符、子串结尾 |
QString & | fill(QChar ch, int size = -1) | resize该QString至size大小,并填充所有字符为ch |
QChar | front() | 返回第一个字符 |
int |
indexOf(QChar ch, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) indexOf(QString str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) indexOf(QRegExp rx, int from = 0) indexOf(QRegularExpression re, int from = 0) |
指定字符、子串的位置 |
QString & |
insert(int position, QString str) insert(int position, QChar ch) insert(int position, const QChar *unicode, int size) insert(int position, const char *str) insert(int position, QByteArray str) |
在指定位置插入字符、子串 |
bool | isEmpty() | 是否为空 |
bool | isLower() | 是否全小写 |
bool | isNull() | 是否为null |
bool | isRightToLeft() | 是否从右往左读 |
bool | isUpper() | 是否全大写 |
bool | isValidUtf16() | 是否包含合法UTF-16编码数据 |
int |
lastIndexOf(QString str, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) lastIndexOf(QChar ch, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) lastIndexOf(QStringRef str, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) lastIndexOf(QRegExp rx, int from = -1) lastIndexOf(QRegularExpression re, int from = -1) |
逆向查找,指定字符、子串的位置 |
QString | left(int n) | 左边n个字符构成的子串 |
QString | leftJustified(int width, QChar fill = QLatin1Char(‘ ‘), bool truncate = false) | 左边n个字符构成的子串,如果n>size,则填充指定字符 |
int | length() | 字符串中字符数,等同于size() |
int | localeAwareCompare(QString other) | 比较 |
QString | mid(int position, int n = -1) | 从pos开始,长度为n的子串 |
QString | normalized(QString::NormalizationForm mode, QChar::UnicodeVersion version = QChar::Unicode_Unassigned) | |
QString & |
prepend(QString str) prepend(QChar ch) prepend(const QChar *str, int len) prepend(const char *str) prepend(QByteArray ba) |
在首部加字符、子串 |
void |
push_back(QString other) push_back(QChar ch) |
在末尾加字符、子串 |
void |
push_front(QString other) push_front(QChar ch) |
在首部加字符、子串 |
QString & |
remove(int position, int n) remove(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) remove(QString str, Qt::CaseSensitivity cs = Qt::CaseSensitive) remove(QRegExp rx) remove(QRegularExpression re) |
移除指定位置处的长度为n的字符。 移除其中的所有字符、子串、正则 |
QString | repeated(int times) | 重复times该字符串构成新串 |
QString & |
replace(int position, int n, QString after) replace(int position, int n, QChar after) replace(int position, int n, const QChar *unicode, int size) replace(QChar before, QChar after, Qt::CaseSensitivity cs = Qt::CaseSensitive) replace(QRegExp rx, QString after) replace(QRegularExpression re, QString after) |
替换;可以用正则 |
void | reserve(int size) | 预留size大小空间 |
void |
resize(int size) resize(int size, QChar fillChar) |
重定义QString大小,可填充指定字符 |
QString | right(int n) | 右边n个字符构成的子串 |
QString | rightJustified(int width, QChar fill = QLatin1Char(‘ ‘), bool truncate = false) | 右边n个字符构成的子串,超过size时在左边填充指定值 |
QString |
section(QChar sep, int start, int end = -1, QString::SectionFlags flags = SectionDefault) section(QString sep, int start, int end = -1, QString::SectionFlags flags = SectionDefault) section(QRegExp reg, int start, int end = -1, QString::SectionFlags flags = SectionDefault) section(QRegularExpression re, int start, int end = -1, QString::SectionFlags flags = SectionDefault) |
用指定分割符分割,取分割后某若*分子串构成的新串 |
QString & |
setNum(int n, int base = 10) setNum(float n, char format = ‘g‘, int precision = 6) setNum(double n, char format = ‘g‘, int precision = 6) |
将数字转QString |
QString & | setRawData(const QChar *unicode, int size) |
浅拷贝; 产生一个指向该QChar *前size个字符构成的子串的QString & |
QString & | setUnicode(const QChar *unicode, int size) | 重置该QString大小为size,并将unicode复制到String中 |
QString & | setUtf16(const ushort *unicode, int size) | 重置该QString大小为size,并将unicode复制到String中 |
void | shrink_to_fit() | 等同于squeeze() |
QString | simplified() | 去除首尾的空格,把中间的连续空格压缩为单个空格 |
int | size() | 返回该QString中的字符数 |
QStringList |
split(QString sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) split(QChar sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) split(QRegExp rx, Qt::SplitBehavior behavior = Qt::KeepEmptyParts) split(QRegularExpression re, Qt::SplitBehavior behavior = Qt::KeepEmptyParts) |
分割,可以用正则 |
void | squeeze() | 释放多余的内存,即没有被有效字符占用的空间 |
bool |
startsWith(QString s, Qt::CaseSensitivity cs = Qt::CaseSensitive) startsWith(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) |
是否以指定字符、子串开始 |
void | swap(QString &other) | 交换两个QString |
QString | toCaseFolded() | |
double | toDouble(bool *ok = nullptr) | QString转指定类型的数字 |
float | toFloat(bool *ok = nullptr) | |
int | toInt(bool *ok = nullptr, int base = 10) | |
QByteArray | toLatin1() | 以不同编码格式转化为QByteArray |
QByteArray | toLocal8Bit() | |
QByteArray | toUtf8() | |
std::string | toStdString() | QString转std::string |
QString |
toLower() toUpper() |
全体转小写、大写 |
QString | trimmed() | 删除首尾的空白字符 |
void | truncate(int position) | 截取前若干字符直到pos构成新串 |
const QChar * | unicode() | 返回该QString转成的const QChar * |
const ushort * | utf16() | 返回该QString转成的const ushort *,以‘\0‘为终止符。 |
5、静态方法
返回值类型 |
方法 |
说明 |
QString | asprintf(const char *cformat, ...) | 格式化字符串 |
int | compare(QString s1, QString s2, Qt::CaseSensitivity cs = Qt::CaseSensitive) | 比较两个QString |
QString |
fromCFString(CFStringRef string) |
从对应的数据格式转化成QString |
QString |
fromLatin1(const char *str, int size = -1) fromLatin1(QByteArray str) |
|
QString |
fromLocal8Bit(const char *str, int size = -1) fromLocal8Bit(QByteArray str) |
|
QString | fromNSString(const NSString *string) | |
QString | fromRawData(const QChar *unicode, int size) | |
QString | fromStdString(std::string str) | |
QString | fromStdU16String(std::u16string str) | |
QString | fromStdU32String(std::u32string str) | |
QString | fromStdWString(std::wstring str) | |
QString |
fromUcs4(const uint *unicode, int size = -1) fromUcs4(const char32_t *str, int size = -1) |
|
QString |
fromUtf8(const char *str, int size = -1) fromUtf8(QByteArray str) |
|
QString |
fromUtf16(const ushort *unicode, int size = -1) fromUtf16(const char16_t *str, int size = -1) |
|
QString | fromWCharArray(const wchar_t *string, int size = -1) | |
int |
localeAwareCompare(QString s1, QString s2) localeAwareCompare(QString s1, QStringRef s2) |
比较 |
QString |
number(int n, int base = 10) number(double n, char format = ‘g‘, int precision = 6) |
数字转String |
QString | vasprintf(const char *cformat, va_list ap) | 等同于asprintf() |