Qt笔记——QString

标准C++提供了两种字符串:一是C风格的以“\0”字符结尾的字符数组,二是字符串类String。而Qt字符串类QString功能更强大。

QString类保存16位Unicode值,提供了丰富的操作、查询、转换等函数。该类还进行了使用隐式共享、高效的内存分配策略等多方面的优化。

1)字符串操作

与C++中的String字符串类一样,QString也提供了“+”和“+=”操作符号来符合两个字符串。

QString str1 = "welcome ";
str1 = str1 + "to you !";
QString str2 = "hello, ";
str2 += "world";


其中,QString str1 = "welcome"传递给QString一个const char*类型的ASCII字符串“welcom”,它被解释为一个典型的以“\0”结尾的C类型字符串。这将会导致调用QString构造函数,来初始化一个QString字符串,其构造函数原型为:

QT_ASCII_CAST_WARN_CONSTRUCTOR QString::QString(const char* str)

被传递的const char*类型的指针又会被函数QString::fromAscii()转换为Unicode编码。默认情况下,函数QString::fromAscii()会把超过128的字符作为Latin-1进行处理(可以通过调用QTextCode::setCodecForString()函数改变QString::fromAsci()函数的处理方式)。

此外,在编译应用程序的时候,也可以通过定义QT_CAST_FROM_ASCII宏变量屏蔽掉该构造函数。如果程序员要求显示给用户的字符串都必须经过QObject::tr()函数的处理,那么屏蔽掉QString的这个构造函数式非常有用的。


QString::append()函数具有和“+=”操作符一样的功能。

QString str1 = “welcome ”;
QString str2 = “to ”;
str1.append(str2);
str1.append("you !");

组合字符串的另一个函数是QString::sprintf()。此函数支持的格式定义符合C++库中的函数sprintf()定义的一样。

QString str;
str.sprintf("%s"," welcome");
str.sprintf("%s"," to you ");
str.sprintf("%s %s","welcome ","to you");

Qt还提供了另一种方便的字符串组合方式,使用QString::arg()函数,此函数的重载可以处理很多的数据类型。此外,一些重载就有额外的参数对字段的宽度、数字基数或者浮点数精度进行控制。通过相对于QString::sprintf(),函数QString::arg()是一个比较好的解决方案,因为它类型安全,完全支持Unicode,并且允许改变“%n”的参数的顺序。

QString str1;
str1 = QString("%1 is %2").arg("tom").arg("boy");//str1="tom is boy"
QString str2;
str2 = QString("%2 is %1").arg("tom").arg("boy");//str2="boy is tom"


QString也提供了一些其他组合字符串的方法,包括:

1.insert():在原字符串特定的位置插入另一个字符串;

2.prepend():在原字符串的开头插入另一个字符串;

3.replace():用指定的字符串代替原字符串中的某些字符

Qt也提供了去除字符串中空白字符的函数

1.QString::trimmed()函数:移除字符串两端的空白字符

2.QString::simplified()函数:移除字符串两端的空白字符,使用单个空格字符“ ”代替字符串中出现的空白字符。



2)查询字符串数据

1.QString::startsWith()判断一个字符串是否以某个字符串开头。此函数具有两个参数,第一个参数指定了一个字符串,第二个参数指定是否大小写敏感(默认情况下,是大小写敏感的)

QString str = "Welcome to You"
str.startsWith("Welcome",Qt::CaseSensitive);//return true
str.startsWith("you",Qt::CaseSensitive);//return false

2.QString::endsWith()判断一个字符串是否以某个字符串结尾。

3.QString::contains()判断一个指定的字符串是否出现过。

4.QString也提供了>,<,<=,>=操作符来对字符串进行比较

5.localeAwareCompare(const QString&,const QString &):静态函数,比较前后两个字符串,如果小于则返回负整数值;如果等于则返回0;如果大于则返回正整数值。该函数的比较是基于本地(locale)字符集的,而且是平台相关的。通常该函数用于向用户显示一个有序的字符串列表。

6.compare(const QString&,const QString&,Qt::CaseSensitive):该函数可以指定是否进行大小写的比较,而大小写的比较是完全基于字符的Unicode编码值的,而且是非常快的,返回值类似于localeAwareCompare()函数。


3)字符串的转换

QString::toInt() , QString::toDouble() , QString::toFloat() , QString:toLong() , QString::toLongLong()等。

QString str = "125";
bool ok;
int hex = str.toInt(&ok,16);//293
int dec = str.toInt(&ok,10);//125

展开阅读全文

没有更多推荐了,返回首页