Qt:QString

0、说明

区别于QByteArray,QString串是Unicode串,每个元素都是QChar 16-bit UTF-16编码(Unicode) ;而QByteArray8-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);

QStringQChar进行了深拷贝——产生一个副本;区别于浅拷贝——产生一个指针

如果不想深拷贝,可以用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()

Qt:QString

上一篇:wpf自定义DataGrid


下一篇:No2.解密回文-栈