Qt之QString字符串类的详细介绍及功能函数示例用法

前序:为了加深对Qt各个类的认识和了解,决定以后再闲暇的时间对Qt类进行详细的阅读(基于Qt cteater 的帮助文档),这样既可以提高自己的英文阅读能力,也可以对各个类有一个更加深入的认识和了解。


注:整个对Qt的拆解和分析都是基于Qt 5.80

开始啃帮助文档。以下总结不会对帮助文档全篇内容翻译,会在自己翻译的基础上加上自己的理解,进行一个简单的总结,以便在使用时忘记的时候复习查看。

目录

1.Detailed Description(详细描述)

2. Public Functions 公有的函数

2.1 类对象的构造

2.2 追加字符串(前追加prepend or push_front和后追加append or push_back)

2.3 组合字符串(arg)

2.4 字符串的裁剪(chop,truncate,resize,remove)

2.5 字符串的比较(compare,constData)

2.6 判断字符串是否存在(contains)

2.7 判断字符串出现的次数(count)

2.8 字符串的大小长度(count,size,length)

2.9 判断字符串是否以某一个子串开始(startsWith)

2.11 查找字符串获取第一次出现位置索引(indexof)

2.12 查找字符串获取最后一次出现位置索引(lastIndexof)

2.13 字符串的插入(insert,left,leftJustified,rightJustified)

2.14 字符串的分割(mid)

2.15 字符串的删除(remove)

2.16 字符串的替换(replace)

2.17 字符串的截取(section)

2.18 字符串的裁剪(fill)

2.19 字符串的简化(simplified,trimmed)

2.20 分隔字符串 (split)

2.22 字符串------>数(toDouble,toInt......)

2.23 数------>QString字符串(setNum,number)

2.24 字符串的大小写转换(toLower,toUpper)

2.25 其他(at,begin,end,isEmpty,isNull,clear)

3. 字符串的重载



1.Detailed Description(详细描述)

①、首先QString字符串类是提供的基于Unicode的字符串。QString存储一个16位的QChar字符串,每个QChar对应一个Unicode 4.0字符,占用两个字节。②、同时,QString采取了implicit sharing(隐式共享)的技术(copy-on-write写时拷贝),这样可以减少内存的使用,避免不必要的复制数据。

QString的常用操作大致包括字符串类对象的构造

2.
Public Functions 公有的函数

2.1 类对象的构造

QString()           // 构造一个空串(null string)
QString(const QChar *unicode, int size = -1) // 构造QString类以QChar数组,以‘\0’为结尾
QString(QChar ch)  // 以一个QChar字符构造QString
QString(int size, QChar ch) // 以size个QChar字符构造QString类
QString(QLatin1String str)  //使用str(单字节编码)构造QString
QString(const QString &other)  // 使用其他的QString类other构造改QString类
QString(const char *str)       // 使用字符数组构造QString类
QString(const QByteArray &ba)  //使用字节数组ba构造QString类

下面对上面的构造函数中一些常用的进行示例:

1、构造函数--->QString::QString(const QChar *unicode, int size = -1)
示例:
    const QChar str[] = {'D','a','e','m','o','n','\0'}  ;
    QString s(str) ;
    qDebug() << s ;

2、构造函数--->QString::QString(int size, QChar ch)
示例:
QChar qc('q') ;
QString qs( 6 , qc );
qDebug() << qs ;

3、构造函数--->QString::QString(QLatin1String str)
示例:
    QLatin1String ql("QLatin1String") ;
    QString qs( ql );
    qDebug() << qs ;

4、构造函数--->QString::QString(const char *str)
示例:
    const char str[] = " Daemon";
    QString s( str ) ;
    qDebug() << s ;

 

5、构造函数--->QString::QString(const QByteArray &ba)
示例:
    const QByteArray ba("Hello DataBase") ;
    QString s( ba ) ;
    qDebug() << s ;

 

2.2 追加字符串(前追加prepend or push_front和后追加append or push_back)

QString s(" Qt ") ;   // s = " Qt "
const QChar str[] = {' ','e','x','a','m','p','l','e','\0'}  ;
s.append(str,8) ;     // s = “Qt  example”
s += " is";           // s = “Qt  example is ”
s.push_back(" innovative"); // s =  “Qt  example is innovative"
s.push_front("Daemon ") ;   // s =  "Daemon  Qt  example is innovative"
qDebug() << s ;

2.3 组合字符串(arg)

 
1、QString arg(const QString &a,int fieldWidth = 0,QChar fillChar = QLatin1Char(' ')) const
注释:如果后两个参数按照默认的设置,函数的功能将First, arg(i) replaces %1. Then arg(total) replaces %2.
 Finally, arg(fileName) replaces %3.以此类推。(numbers must be in the range 1 to 99.)
示例:
     QString i(QString::number(007));
     QString total("series");
     QString fileName("Movies ");
     QString status = QString("%1 is %2 of %3").arg(i).arg(total).arg(fileName);
     qDebug() << status ;

但是仔细研究帮助文档的话,里面可以挖掘出额外的东西出来,见下:

2、QString arg(const QString &a,int fieldWidth = 0,QChar fillChar = QLatin1Char(' ')) const
第二个参数fieldWidth指定参数a应占用的最小空间量,如果a需要的空间小于fieldWidth,则使用字符fillChar填充到fieldWidth。
fieldWidth为正值时产生右对齐的文本。
fieldWidth为负值时产生左对齐的文本。
默认填充fillChar为空格,可自定义填充QChar字符。
     QString para1("Git");
     QString para2("GitHub");
     QString para3("Better Study Heaven");
     QString status = QString("%1 and %2 is %3").arg(para1 , -5 , QChar('a') )
                                                .arg( para2 , 8 , QChar('b') )
                                                .arg( para3 , -para3.length()-5 ) ;
     qDebug() << status ;

 

3、QString arg(int a,int fieldWidth=0,int base = 10,QChar fillChar= QLatin1Char(' '))const
注释:此重载函数较前面的函数多路一个参数base,默认为10.其值必须在2~36
(which is 10 by default and must be between 2 and 36.),
其功能用于声明第一个参数a需要以base进制进行输出显示。
示例:
QString para1("65535");
    QString para2(" hexadecimal number ");
    QString status = QString("%1 and %2 is %3").arg(para1).arg( para2 )
                                               .arg( 65535 , 0 , 16 ) ; //将65535以16进制显示
    qDebug() << status ;

2.4 字符串的裁剪(chop,truncate,resize,remove)

void QString::chop(int n)
解释:从字符串末尾删除n个字符。如果n大于或等于size(),则结果为空字符串;如果n是负数,它就等于0
示例:
    QString qs("GitHub");
    QString qs1("GitHub");
    QString qs2("GitHub");
    qs.chop(3) ; qs1.chop(8);qs2.chop(-3);
    qDebug() << "qs = "<<qs<<"qs 1=   "<<  qs1<< "  qs2 =   "<<qs2 ;

void QString::truncate(int position)
解释:截断给定位置索引处的字符串,如果指定的位置索引在字符串的末尾之外,则什么也不会发生。
相当于从开始字符出,截取position个字符,组成一个字符串。
示例:
    QString qs("GitHub");
    QString qs1("GitHub");
    qs.truncate(5);  qs1.truncate(9);
    qDebug() << "qs = "<<qs<<"qs 1=   "<<  qs1 ;

 

void QString::resize(int size)
解释:将字符串的大小设置为size个字符的大小。
示例:
    QString qs("GitHub");
    qs.resize(5);
    qDebug() << "qs = "<<qs;

 

QString &QString::remove(int position, int n)
解释:从给定的position位置索引开始,从字符串中删除n个字符,并返回对该字符串的引用
示例:
    QString qs("GitHub");
    qDebug() << qs.remove(4,1 ) ;

 

2.5 字符串的比较(compare,constData)

int QString::compare(const QString &other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
解释:比较这个字符串和另一个字符串other,如果这个字符串小于、等于或大于另一个字符串,则返回一个小于、等于或大于零的整数。
(从第一个字符开始,一个一个字符进行对比)
第二个参数为是否区分大小写敏感的布尔量,
设置Qt::CaseInsensitive为大小写不敏感,设置Qt::CaseSensitive为大小写敏感
示例:
QString qs("GitHub") ;
    qDebug() << qs.compare("Git") << "  " <<qs.compare("GitHub")<<" " 
             << qs.compare("gitHub",Qt::CaseInsensitive) <<"  "                             
             <<qs.compare("gitHub",Qt::CaseSensitive);

const QChar *QString::constData() const
解释:返回一个指向存储在QString中的数据的指针。指针可用于访问组成字符串的字符。为了方便起见,数据以“\0”结尾。
注:注意,只有在字符串没有修改的情况下,指针才有效。
示例:
QString qs("GitHub") ;
    qDebug() << *qs.constData()<< " "<< *( qs.constData() + 3 );

2.6 判断字符串是否存在(contains)

bool QString::contains(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
解释:如果此字符串包含字符串str的出现,则返回true;否则返回false。
如果cs是Qt::CaseSensitive(默认),则搜索是大小写敏感的;否则,搜索不区分大小写。
示例:
QString qs("GitHub") ;
    qDebug() << qs.contains("thU",Qt::CaseInsensitive ) <<"  "                    
             << qs.contains("thU",Qt::CaseSensitive ) ;

2.7 判断字符串出现的次数(count)

int QString::count(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
解释:返回字符串str在该字符串中(可能重叠的)出现的次数
如果cs是Qt::CaseSensitive(默认),则搜索是大小写敏感的;否则,搜索不区分大小写。
示例:
    QString qs("GitHub and git is a Better heaven,we can use Git bash in computer Deskop!") ;
    qDebug() << qs.count("git",Qt::CaseInsensitive ) <<"  "<<qs.count("git",Qt::CaseSensitive ) ;

2.8 字符串的大小长度(count,size,length)

int QString::count() const    //返回此字符串中的字符数。
int QString::size() const     //返回此字符串中的字符数。
int QString::length() const   //返回此字符串中的字符数。
示例:
    QString qs("GitHub and git is a Better heaven,we can use Git bash in computer Deskop!") ;
    qDebug() << qs.count() << " " <<qs.length()<<"  "<<qs.size() ;

QChar *QString::data()
解释:返回一个指向存储在QString中的数据的指针。该指针可用于访问和修改组成字符串的字符。为了方便起见,数据以“\0”结尾。
示例:
      QString str = "GitHub";
      QChar *data = str.data();
      while (!data->isNull()) {
          qDebug() << *data;
          ++data;
      }

 

2.9 判断字符串是否以某一个子串开始(startsWith)

bool QString::startsWith(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
示例:
  QString str = "Bananas";
  str.startsWith("Ban");     // returns true
  str.startsWith("Car");     // returns false

2.11 查找字符串获取第一次出现位置索引(indexof)

bool QString::endsWith(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
解释:如果字符串以s结尾,则返回true;否则返回false。
如果cs是Qt::CaseSensitive(默认),则搜索是大小写敏感的;否则,搜索不区分大小写。
示例:
    QString qs("GitHub") ;
    qDebug() << qs.endsWith("hUB",Qt::CaseInsensitive ) <<"  "            
             << qs.endsWith("hUB",Qt::CaseSensitive ) ;

2.12 查找字符串获取最后一次出现位置索引(lastIndexof)

int QString::lastIndexOf(const QString &str, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
解释:返回此字符串中字符串str的最后一次出现的索引位置,从索引位置回溯搜索。如果from是-1(默认值),搜索从最后一个字符开始;如果from是-2,则在倒数第二个字符处,依此类推。如果没有找到str,则返回-1。
如果cs是Qt::CaseSensitive(默认),则搜索是大小写敏感的;否则,搜索不区分大小写。
示例:
    QString qs("GHubgithub!") ;
    qDebug() <<qs.lastIndexOf("hub",0) <<"   "<< qs.lastIndexOf("hub",-1)<<" "<<qs.lastIndexOf("hub",5) ;
    qDebug() <<qs.lastIndexOf("hub",0,Qt::CaseInsensitive) <<"   "<< qs.lastIndexOf("hub",-1,Qt::CaseInsensitive)<<" "<<qs.lastIndexOf("hub",5,Qt::CaseInsensitive) ;

2.13 字符串的插入(insert,left,leftJustified,rightJustified)

QString &QString::insert(int position, const QString &str)
解释:在给定的索引位置插入字符串str并返回对该字符串的引用。
示例:
    QString qs("GitHub") ;
    qDebug() << qs.insert( 3 , QString(" Qt::CaseInsensitive ") ) ;

QString QString::left(int n) const  // 返回最左边数,包含n个字符的一个子串
QString right(int n) const          // 返回最右边数,包含n个字符的一个子串
示例:
    QString qs(" GitHub ") ;
    qDebug() << qs.left(3) <<"  "<<qs.right(4);

 

QString QString::leftJustified(int width, QChar fill = QLatin1Char( ' ' ), bool truncate = false) const
解释:返回一个大小为width的字符串,该字符串包含由填充字符填充的字符串。左对齐
第三个参数为是否需要截断使能位;
如果truncate为false且字符串的size()大于宽度,则返回的字符串是该字符串的副本
如果truncate为真且字符串的size()大于宽度,则删除位置宽度之后的字符串副本中的任何字符,并返回副本。
示例:
    QString qs("GitHub") ;
    qDebug()<<qs.leftJustified(10,'*') <<" "<<qs.leftJustified(2,'*',false)<<"  "<<qs.leftJustified(2,'*',true);
 
QString QString::rightJustified(int width, QChar fill = QLatin1Char( ' ' ), bool truncate = false) const
解释:返回一个大小为width的字符串,该字符串包含由填充字符填充的字符串。右对齐
第三个参数为是否需要截断使能位;
如果truncate为false且字符串的size()大于宽度,则返回的字符串是该字符串的副本
如果truncate为真且字符串的size()大于宽度,则删除位置宽度之后的字符串副本中的任何字符,并返回副本
示例:
   QString qs("GitHub") ;
   qDebug()<<qs.rightJustified(10,'*')<<" "<<qs.rightJustified(2,'*',false)<<"  "<<qs.rightJustified(2,'*',true);

 

2.14 字符串的分割(mid)

QString QString::mid(int position, int n = -1) const
解释:返回一个包含该字符串的n个字符的字符串,从指定的位置索引开始分割。
示例:
    QString qs("GitHub") ;
    qDebug() << qs.mid(3,2) <<" "<<qs.mid(5);

2.15 字符串的删除(remove)

QString &QString::remove(int position, int n)
解释:从给定的位置索引开始,从字符串中删除n个字符,并返回对该字符串的引用。
如果指定的位置索引在字符串中,但是位置+ n超出了字符串的结尾,则字符串将在指定的位置截断。
示例:
    QString qs("GitHub.com") ;
    qDebug() << qs.remove(1,3) ;
    qDebug() <<qs.remove(2,8)  ;

QString &QString::remove(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive)
解释:删除该字符串中给定str字符串的所有匹配项,并返回该字符串的引用。
如果cs是Qt::CaseSensitive(默认),则搜索是大小写敏感的;否则,搜索不区分大小写。
示例:
    QString qs("GitHub.com+git.COM") ;QString qs1("GitHub.com+git.COM") ;
    qDebug() << qs.remove("git",Qt::CaseSensitive) ;
    qDebug() << qs.remove("git",Qt::CaseInsensitive) ;

 

2.16 字符串的替换(replace)

QString &QString::replace(int position, int n, const QString &after)
解释:将从索引位置开始的n个字符替换为后面的字符串,并返回对该字符串的引用。
示例:
    QString qs("GitHub.com") ;
    qDebug() << qs.replace( 1 , 3 , " Daemon " ) ;

2.17 字符串的截取(section)

QString QString::section(QChar sep, int start, int end = -1, SectionFlags flags = SectionDefault) const
解释:这个函数返回字符串的一部分。
该字符串被视为由字符sep分隔的字段序列。返回的字符串包含从位置开始到位置结束的字段
如果没有指定end,则包含从位置开始到字符串结束的所有字段
字段的编号为0、1、2等,从左开始计数,而-1、-2等,从右到左计数。
如果start或end是负数,我们从字符串的右边开始计算字段,最右边的字段是-1,最右边的字段是-2,以此类推。
第四个参数可以设置是否区分大小写,是否跳过空字段,如何处理前置和后置分隔符;
示例:
  QString str;
  QString csv = "forename,middlename,surname,phone";
  QString path = "/usr/local/bin/myapp"; // First field is empty
  QString::SectionFlag flag = QString::SectionSkipEmpty;
 
  str = csv.section(',', 2, 2);        // str == "surname"
  str = path.section('/', 3, 4);       // str == "bin/myapp"
  str = path.section('/', 3, 3, flag); // str == "myapp"
  str = csv.section(',', -3, -2);      // str == "middlename,surname"
  str = path.section('/', -1);         // str == "myapp"
第四个参数详解:
QString::SectionDefault //计算空字段
QString::SectionSkipEmpty //将空字段视为不存在的字段
QString::SectionIncludeLeadingSep //在结果字符串中包含前导分隔符(如果有)
QString::SectionIncludeTrailingSep //在结果字符串中包含尾随分隔符(如果有)
QString::SectionCaseInsensitiveSeps // 不区分大小写地比较分隔符

2.18 字符串的裁剪(fill)

QString &QString::fill(QChar ch, int size = -1)
解释:将字符串中的每个字符设置为字符ch。如果大小不同于-1(默认值),则预先将字符串调整为size大小。
示例:
    QString qs("GitHub") ;
    QString qs1("GitHub") ;
    qDebug() << qs.fill(QChar('t')) <<" "<<qs.fill(QChar('t') , 3) ;

2.19 字符串的简化(simplified,trimmed)

QString QString::simplified() const
解释:返回一个字符串,该字符串已从开始和结束处删除空白,并将每个内部空白序列替换为单个空格
空白序列包括ASCII字符“\ t”, ' \ n ', ' \ v ', ' \ f ', ' \ r ',和' '。
示例:
  QString str = "  lots\t of\nwhitespace\r\n ";
  str = str.simplified();
  // str == "lots of whitespace";
QString QString::trimmed() const
解释:返回一个字符串,该字符串已从开始和结束处删除空白。
与simplified()不同,trim()只保留内部空白序列。
示例:
  QString str = "  lots\t of\nwhitespace\r\n ";
  str = str.trimmed();
  // str == "lots\t of\nwhitespace"

2.20 分隔字符串 (split)

 
QStringList 
split(const QString &sep, SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
解释:在sep发生的地方将字符串分成子字符串,并返回这些字符串的列表。如果sep与字符串中的任何地方不匹配,split()将返回一个包含该字符串的单元素列表。
参数cs指定sep是区分大小写的匹配还是区分大小写的不匹配。
如果behavior是QString::SkipEmptyParts,则结果中不会出现空条目。默认情况下,KeepEmptyParts将保留空条目
示例:
     QString str = "I:/Qt/Qt5.8.0/5.8/Sr/qtcharts/src";
     QStringList list = str.split( "/");
     for( quint8 i = 0 ; i < list.length() ; i ++)
         qDebug() << "list[ "<<i<<"] = " << list[i];

2.22 字符串------>数(toDouble,toInt......)

double QString::toDouble(bool *ok = Q_NULLPTR) const  // 字符串----->浮点数
解释:将一个字符串转换为一个double值,如果转换失败,则返回0.0
如果发生转换错误,*ok设置为false;否则*ok设置为true
示例:
    bool ok  ;
    QString str = "1234.56";
    qDebug() << str.toDouble( &ok ) ;
    qDebug() << ok ;
 
int QString::toInt(bool *ok = Q_NULLPTR, int base = 10) const   // 字符串----->整数
示例:
  QString str = "FF";
  bool ok;
  int hex = str.toInt(&ok, 16);       // hex == 255, ok == true
  int dec = str.toInt(&ok, 10);       // dec == 0, ok == false

2.23 数------>QString字符串(setNum,number)

QString &QString::setNum(int n, int base = 10)
解释:将数转换为字符串类,第二个参数为需要设置为目标数需要显示的进制类型,默认为十进制
示例:
    QString str;
    str.setNum( 65536 ) ;
    QString str1 ;
    str1.setNum( 65535 , 16 ) ;
    qDebug() << str <<"    "<< str1 ;

[static] QString QString::number(int n, int base = 10)
示例:
    QString qs ;
    qs= qs.number( 10 ,10 ) ;
    QString qs1 ;
    qs1= qs1.number( 10 ,16 ) ;
    qDebug() << "qs = "<<qs <<"qs1 = "<<qs1 ;

 

2.24 字符串的大小写转换(toLower,toUpper)

QString QString::toLower() const  // 将该字符串中的字符全部转换为小写
QString toUpper() const           // 将该字符串中的字符全部转换为大写
示例:
QString str = "I:/Qt/Qt5.8.0/5.8/Sr/qtcharts/src";
qDebug() << str.toLower() << "  " << str.toUpper() ;

2.25 其他(at,begin,end,isEmpty,isNull,clear)

const QChar at(int position) const
解释:返回字符串中给定索引位置的字符
该位置必须是字符串中的有效索引位置(即, 0 <= position < size())。
QString para2("GitHub");
    for(quint8 i = 0 ;i<para2.length();i++)
        qDebug() << i << " = " << para2.at(i);

iterator QString::begin()
解释:返回一个指向字符串中第一个字符的(指针)
示例:
QString para2("GitHub");
qDebug() << *(para2.begin()) << "   "<<*(para2.begin() + 3);
 
iterator QString::end()
解释:返回指向字符串中最后一个字符后的虚构字符的指针。
示例:
QString para2("GitHub");
qDebug() << *(para2.end() - 1 ) << "   "<<*(para2.end() - 3);

 

int QString::capacity() const
解释:返回可以存储在字符串中的最大字符数。(一般来说,你很少需要调用这个函数)
bool QString::isNull() const   //如果此字符串为空,则返回true;否则返回false。
bool QString::isEmpty() const  //如果字符串没有字符,则返回true;否则返回假
void QString::clear()          //清除字符串的内容并使其为空
示例:
    QString qs("GitHub") ;
    qDebug() << qs.isEmpty() <<"    " << qs.isNull() ;
    qs.clear();
    qDebug() << qs.isEmpty() <<"    " << qs.isNull() ;    

3. 字符串的重载

// QString 中实现了大量的操作符重载,可以方便我们进行正常的比较等。以下简单的列举几个:
QString & operator+=(const QString &other)
bool operator>(const char *other) const
示例:
QString str = "I" ;
str = str + "Want "+"shang"+"tian" ;
qDebug()  <<str <<   "   "<< ( str >"a" ) ;

本文系转载,如有侵权,请联系本人,谢谢!!!