Qt:QString
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(int size, QChar ch) | 构造一个大小为size,所有字符都为ch的串 |
| QString(QChar ch) | 构造只包含单个字符ch的串 |
| QString(const QChar *unicode, int size = -1) | |
| QString() |
4、实例方法
返回值类型 |
方法 |
说明 |
|
QString & QString & char |
operator=(QByteArray ba) operator=(QString other) operator=(const char *str) operator+=(QChar ch) operator+=(QString other) operator+=(const char *str) operator+=(QByteArray ba) operator[](int position) |
赋值 连接 指定位置处的字符 |
| 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() |
6、常用
1)连接:+=
2)把数字转字符串:QString::number(n)
3)移除末尾字符:str.chop(1);
4)格式化:arg(a1,a2,..,a9)
用arg的一系列参数填充QString中对应的占位符%n,需要注意的是这个函数并不是在QString自身上修改,而是修改后返回一个QString,所以要用另一个QString来承接:
QString s="%1 is arg1,%2 is arg2,%3 is arg3";
s = s.arg("a1","a2","a3");
qDebug()<<s; //"a1 is arg1,a2 is arg2,a3 is arg3"
5)如果一个字符串后2个字符是数字,如何把它提取为int数据?
QString s = "This is number 13";
int n = s.right(2).toInt();
Qt:QString的更多相关文章
- QT:QString、QByteArray和char *的转换 【转载】
原文网址:http://blog.csdn.net/light1028/article/details/7899541 第一种,数据流的方式,这里只说从QByteArray转向QString. QBy ...
- Qt 中QString 字符串操作:连接、组合、替换、去掉空白字符
Qt中的字符串类 QString类 保存了16位Unicode值,提供了丰富的操作.查询和转换等函数. QString 字符串有如下几个操作符: (1) "+" 用于组合两个字符串 ...
- Qt下 QString转char*
Qt下面,字符串都用QString,确实给开发者提供了方便.Qt再使用第三方开源库时,由于库的类型基本上都是标准的类型,字符串遇的多的就是Char*类型 Qt再使用第三方开源库时,由于库的类型基本上都 ...
- Qt中QString、QByteArray、int、double之间转换
最近写Qt中的tcp网络编程,Socke连接后,接受到的数据类型是字节型,这就涉及到了大量的类型转换,在网上辗转几辄,总算有了点结果,特此跟大家分享.好了,不废话,下面细说. 方法/步骤 1. ...
- Qt下QString转char*
Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换 Qt再使用第三方开源库时,由于库的类型基本上都是标准的 ...
- Qt下 QString转char*(转)
Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换 Qt再使用第三方开源库时,由于库的类型基本上都是标准的 ...
- Qt中 QString 转 char*
Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换 Qt再使用第三方开源库时,由于库的类型基本上都是标准的 ...
- Qt 的QString类的使用
Qt的QString类提供了很方便的对字符串操作的接口. 使某个字符填满字符串,也就是说字符串里的所有字符都有等长度的ch来代替. QString::fill ( QChar ch, int size ...
- zz Qt下 QString转char*和char []
以下内容为转载:http://www.cnblogs.com/Romi/archive/2012/03/12/2392478.html -------------------------------- ...
随机推荐
- python3 连接mysql数据库
准备工作: 1.在本地虚拟机172.16.0.115上安装mysql,并设置权限如下 mysql> grant all privileges on *.* to root@"%&quo ...
- 『无为则无心』Python基础 — 42、Python中文件的读写操作(二)
目录 (5)文件对象方法(重点) 1)写方法 2)读方法 3)seek()方法 4)tell()方法 (6)关闭 (7)综合练习:读取大文件 (5)文件对象方法(重点) 1)写方法 @1.语法 对象对 ...
- Java协变、逆变、类型擦除
协变.逆变 定义 Java中String类型是继承自Object的,姑且记做String ≦ Object,表示String是Object的子类型,String的对象可以赋给Object的对象.而Ob ...
- Android Adapter基本理解
感谢大佬:https://blog.csdn.net/l799069596/article/details/47301711 Android Adapter基本理解: 我的理解是: 1.一个有许多ge ...
- memcached 测试代码
转载请注明来源:https://www.cnblogs.com/hookjc/ #include<stdio.h> #include <iostream> #include & ...
- 「2022」打算跳槽涨薪,必问面试题及答案 -- ECMAScript 篇
起点低怕什么,大不了加倍努力.人生就像一场马拉松比赛,拼的不是起点,而是坚持的耐力和成长的速度.只要努力不止,进步也会不止. 1.ECMAScript 与 JavaScript 的关系? ECMA(E ...
- 编译安装haproxy
一.安装lua环境 1.1 安装依赖包 [root@centos7 ~]# yum install gcc readline-devel 1.2 下线lua源码包并解压 [root@centos7 ~ ...
- 4.Flink实时项目之数据拆分
1. 摘要 我们前面采集的日志数据已经保存到 Kafka 中,作为日志数据的 ODS 层,从 kafka 的ODS 层读取的日志数据分为 3 类, 页面日志.启动日志和曝光日志.这三类数据虽然都是用户 ...
- Elasticsearch按请求体基本查询
1 分页: localhost:9200/get-together/_search {"query": {"match_all": {}},"from ...
- Solution -「多校联训」神
\(\mathcal{Description}\) Link. 给定 \(n\) 阶排列 \(a\),\(q\) 次询问,每次给出 \(1\le l_1\le r_1<l_2\le r_ ...