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的更多相关文章

  1. QT:QString、QByteArray和char *的转换 【转载】

    原文网址:http://blog.csdn.net/light1028/article/details/7899541 第一种,数据流的方式,这里只说从QByteArray转向QString. QBy ...

  2. Qt 中QString 字符串操作:连接、组合、替换、去掉空白字符

    Qt中的字符串类 QString类 保存了16位Unicode值,提供了丰富的操作.查询和转换等函数. QString 字符串有如下几个操作符: (1) "+" 用于组合两个字符串 ...

  3. Qt下 QString转char*

    Qt下面,字符串都用QString,确实给开发者提供了方便.Qt再使用第三方开源库时,由于库的类型基本上都是标准的类型,字符串遇的多的就是Char*类型 Qt再使用第三方开源库时,由于库的类型基本上都 ...

  4. Qt中QString、QByteArray、int、double之间转换

    最近写Qt中的tcp网络编程,Socke连接后,接受到的数据类型是字节型,这就涉及到了大量的类型转换,在网上辗转几辄,总算有了点结果,特此跟大家分享.好了,不废话,下面细说. 方法/步骤     1. ...

  5. Qt下QString转char*

    Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换 Qt再使用第三方开源库时,由于库的类型基本上都是标准的 ...

  6. Qt下 QString转char*(转)

    Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换 Qt再使用第三方开源库时,由于库的类型基本上都是标准的 ...

  7. Qt中 QString 转 char*

    Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换 Qt再使用第三方开源库时,由于库的类型基本上都是标准的 ...

  8. Qt 的QString类的使用

    Qt的QString类提供了很方便的对字符串操作的接口. 使某个字符填满字符串,也就是说字符串里的所有字符都有等长度的ch来代替. QString::fill ( QChar ch, int size ...

  9. zz Qt下 QString转char*和char []

    以下内容为转载:http://www.cnblogs.com/Romi/archive/2012/03/12/2392478.html -------------------------------- ...

随机推荐

  1. python3 连接mysql数据库

    准备工作: 1.在本地虚拟机172.16.0.115上安装mysql,并设置权限如下 mysql> grant all privileges on *.* to root@"%&quo ...

  2. 『无为则无心』Python基础 — 42、Python中文件的读写操作(二)

    目录 (5)文件对象方法(重点) 1)写方法 2)读方法 3)seek()方法 4)tell()方法 (6)关闭 (7)综合练习:读取大文件 (5)文件对象方法(重点) 1)写方法 @1.语法 对象对 ...

  3. Java协变、逆变、类型擦除

    协变.逆变 定义 Java中String类型是继承自Object的,姑且记做String ≦ Object,表示String是Object的子类型,String的对象可以赋给Object的对象.而Ob ...

  4. Android Adapter基本理解

    感谢大佬:https://blog.csdn.net/l799069596/article/details/47301711 Android Adapter基本理解: 我的理解是: 1.一个有许多ge ...

  5. memcached 测试代码

    转载请注明来源:https://www.cnblogs.com/hookjc/ #include<stdio.h> #include <iostream> #include & ...

  6. 「2022」打算跳槽涨薪,必问面试题及答案 -- ECMAScript 篇

    起点低怕什么,大不了加倍努力.人生就像一场马拉松比赛,拼的不是起点,而是坚持的耐力和成长的速度.只要努力不止,进步也会不止. 1.ECMAScript 与 JavaScript 的关系? ECMA(E ...

  7. 编译安装haproxy

    一.安装lua环境 1.1 安装依赖包 [root@centos7 ~]# yum install gcc readline-devel 1.2 下线lua源码包并解压 [root@centos7 ~ ...

  8. 4.Flink实时项目之数据拆分

    1. 摘要 我们前面采集的日志数据已经保存到 Kafka 中,作为日志数据的 ODS 层,从 kafka 的ODS 层读取的日志数据分为 3 类, 页面日志.启动日志和曝光日志.这三类数据虽然都是用户 ...

  9. Elasticsearch按请求体基本查询

    1 分页: localhost:9200/get-together/_search {"query": {"match_all": {}},"from ...

  10. Solution -「多校联训」神

    \(\mathcal{Description}\)   Link.   给定 \(n\) 阶排列 \(a\),\(q\) 次询问,每次给出 \(1\le l_1\le r_1<l_2\le r_ ...