Qt中QString相关操作以及常用函数

849 阅读4分钟

QString相关字符串操作

标准C++提供了两种字符串:一种是C语言风格的以'\0'字符结尾的字符数组;另一种是字符串类String。Qt中则提供了QString类。

1.1 操作字符串

  • QString提供了“+=”操作符。
QString str1 = "Welcome";
str1 = str1 + "to you";   //str1="Welcome to you"  
QString str2 = "Hello"; 
str2 += "World";          //str2="Hello World"
  • QString::append()具有与"+="相同的功能,是现在一个字符串末尾追加一个字符串
QString str1 = "Dai";
QString str2 = "wudi";
str1.append("zp");       //str1="Daizp"
str1.append(str2);       //str1
  • 组合字符串的另一个函数是QString::sprintf(),此函数支持的定义格式和C++中的函数sprintf()定义是一样的。
QString str;
str.sprintf("%s","Dai");      //str = "Dai"
str.sprintf("%s","zp");       //str = "Daizp"
str.sprintf("%s","wudi");     //str = "Daizpwuidi"
  • Qt提供了一种方便字符串组合的方式,使用QString::arg()函数,此函数的重载可以处理很多的数据类型,相比于QString::sprintf(),函数QString::arg()是一个比较好的解决方案,因为它类型安全,完全支持Unicode,并且允许改变"%n"参数的顺序吗,例如
QString str;
str = QString("%1 was born in %2").arg("Daizp").arg(1999); //str = "Daizp was born in 1999"
  • QString提供了一些其他组合字符串的方法:
insert();      //在原字符串特定的位置插入另一个字符串
prepend();     //在源字符串的开头插入另一串字符串
replace();     //用指定的字符串去替换原字符串中的某些字符
  • 还有一些去除空格、制表符等空白内容的函数。
QString::trimmed();     //移除字符串两端的空白字符
QString::simplified();  //移除字符串两端的空白字符,使用单个空格字符替换字符串中出现的空白字符

1.2 查询字符串数据

查询字符串数据有多种方式,具体如下。

  • 函数QString::startsWith() 判断一个字符串是否以某个字符串开头,此函数有两个参数,第一个是指定的字符串,第二个参数指定是否大小写敏感(默认情况下大小写是敏感的)。例如:
QString str = "Welcome to you!";
str.startsWith("Welcome",Qt::CaseSensitive); //返回true
str.startsWith("you",Qt::caseSensitive);     //返回false
  • 函数QString::endsWith()与QString::startsWith() 类似,查询结尾是否为指定字符串。
  • QString::contains()判断一个指定的字符串是否出现过,例如:
QString str = "Welcome to you";
str.contains("to",Qt::CaseSensitive);  //返回true
  • 比较两个字符串也是经常使用的功能,QString提供了多种比较手段
1. operator<(const QString&); 比较一个字符串是否小于另一个字符串,如果是,返回true
2. operator<=(const QString&)比较一个字符串是否小于等于另一个字符串,如果是,返回true
3. operator==(const QString&)比较一个字符串是否等于另一个字符串,如果是,返回true
4. operator>=(const QString&)比较一个字符串是否大于等于另一个字符串,如果是,返回true
5. localeAwareCompare(const QString&,const QString&): 静态函数,比较前后两个字符串,如果前面的字符串小于后面的字符串,则返回负数,等于则返回0,大于则返回正数,该函数的比较是基于本地字符集的,而且是平台相关的,通常,该函数用于向用户显示一个有序的字符串列表。
6. compare(const QString&,const QString&,Qt::CaseSensitivity):返回值和localeAwareCompare类似,可以指定是否进行大小写的比较,而大小写的比较是完全基于字符串的Unicode编码值的,而且是非常快的。

1.3 字符串的转换

QString类提供了丰富的转换函数,可以将一个字符串转换为数值类型或者其他类的字符编码集。

(1) QString::toInt() 将字符转换为整形数值,类似的还有toDouble(),toFloat()等等。
    QString str = "125";
    bool ok;
    int hex = str.toInt(&ok,16);      //ok = true, hex = 293
    int dec = str.toInt(&ok,10);      //ok = true, dec = 125
(2) QString 提供的字符编码集的转换函数将会返回一个const char*类型版本的QByteArray,QByteArray(const char*)
构造的一个对象,QByteArray类具有一个字节数组,既可以存储原始字节,也可以存储传统的以'\0'结尾的8位字符串,在Qt中QByteArray比使用const char* 更方便,且QByteArray也支持隐式共享,转换函数有以下几种
    1.toAscii():返回一个ASCII编码的8位字符串
    2.toLatin1():返回一个Latin-1编码的8位字符串
    3.toUtf8():返回一个UTF-8编码的8位字符串(UTF-8是ASCII码的超集,它支持整个Unicode字符集)
    4.toLocal8Bit():返回一个系统本地编码的8位字符串
        用法:
            QString str = "Welcome to you!";   //初始化一个字符串对象
            QByteArray ba = str.toAscii();     // (a)
            qDebug() << ba ;                   // (b)
            ba.append("Hello,World!");         // (c)
            qDebug() << ba.data();             //输出最后结果
        (a)通过此函数将Unicode编码的字符串转换为ASCII码的字符串,存储在ba中
        (b)输出转换后的字符串
        (c)使用append对字符串追加字符串

NULL字符串和空(empty)字符串的区别

一个NULL字符串就是使用QString的默认构造函数或者使用(const char*)0 作为参数的构造函数创建的QString的字符串对象;而字符串就是一个大小为0的字符串,一个null字符串一定是空字符串,但是空字符串不一定是null字符串

QString().isNull();        //结果为true
QString().isEmpty();       //结果为true
QString("").isNull();        //结果为false
QString("").isEmpty();       //结果为true