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. linux中cut命令与tr命令

    目录 一:linux中cut命令 1.cut 命令作用 2.参数 3.参数案例解析: 二:tr命令 1.tr命令作用 2.tr命令格式 3.tr命令参数 4.案例解析: 一:linux中cut命令 1 ...

  2. AWS SAA_C01 考试分享。

    Saa-c01 经验分享! 序言1.介绍自己的情况,我是一个做后台开发的初级java程序员.还是处于在写业务逻辑的阶段,我对aws可谓是啥都不懂,纯种的小白,完全是从0基础开始学习的.希望分享一些我的 ...

  3. 计算机电子书 2018 BiliDrive 备份

    下载方式 根据你的操作系统下载不同的 BiliDrive 二进制. 执行: bilidrive download <link> 链接 文档 链接 Webpack 中文指南.epub (40 ...

  4. 需求: 使用LinkedList存储一副扑克牌,然后实现洗牌功能。

    import java.util.LinkedList; import java.util.Random; /* 需求: 使用LinkedList存储一副扑克牌,然后实现洗牌功能. */ //扑克类 ...

  5. springcloud+gateway微服务整合swagger

    单一的微服务集成swagger: maven: <dependency> <groupId>io.springfox</groupId> <artifactI ...

  6. Spark入门案例 - 统计单词个数 / wordcount

    Scala版 import org.apache.spark.{SparkConf, SparkContext} object WordCountScala { def main(args: Arra ...

  7. Linux中使用systemctl操作服务、新建自定义服务

    Linux有12种Unit,对于个人来讲,用的最多的是Service Unit,下面的Unit均指Service Unit(服务单元) # 启动Unit systemctl start appname ...

  8. 【HarmonyOS】【Demo】【JAVA UI】 鸿蒙怎么在Webview上添加组件

    在大家HarmonyOS开发中,Webview组件上添加组件可能是很常见的功能了,HarmonyOS的webview和Android的webwiew存在一点点区别,今天来实现这个功能 使用项目布局显示 ...

  9. Python内置模块(re+collections+time等模块)

    Python内置模块(re+collections+time等模块) 1. re模块 import re 在python要想使用正则必须借助于模块 re就是其中之一 1.1 findall功能( re ...

  10. 37、python并发编程之协程

    目录: 一 引子 二 协程介绍 三 Greenlet 四 Gevent介绍 五 Gevent之同步与异步 六 Gevent之应用举例一 七 Gevent之应用举例二 一 引子 本节的主题是基于单线程来 ...