Qt的QString类型


QString存储字符串采用的是Unicode码,每一个字符是一个16位的QChar,而不是8位的char,所以QString处理中文字符没有问题,而且一个汉字算作是一个字符。

QString转化为其他类型

字符串转整数

QString类从字符串转换为整数的函数有:

int     toInt(bool *ok = Q_NULLPTR, int base = 10)      const
long    toLong (bool *ok = Q_NULLPTR, int base = 10)    const
short   toShort (bool *ok = Q_NULLPTR, int base = 10)   const
uint    toUInt (bool *ok = Q_NULLPTR, int base = 10)    const
ulong   toULong (bool *ok = Q_NULLPTR, int base = 10)   const

字符串转浮点数

QString将字符串转换为浮点数的函数有:

double   toDouble(bool *ok = Q_NULLPTR)    const
float    toFloat (bool *ok = Q_NULLPTR)    const

数值转化成QString

可以使用的函数:

Qstring   &setNum (int n, int base = 10)
QString   number (int n, int base = 10)

转化成其他进制:

int val;
QString::number(val);//默认转化为10进制
QString::number(val,2);
QString::number(val,16);
str=str.setNum(val,16);

浮点数转化为QString的时候设置保留的位数

QString str;
//QString的静态函数number()和asprintf()
str=QString::number(total,'f',2); 
str=QString::asprintf("%.2f",total); 
//公共函数setNum()和sprintf()
str=str.setNum(total,'f',2); 
str=str.sprintf("%.2f",total);

QString 是一个类

所以QString是可以像其他的容器一样进行遍历和迭代器的使用。

QString 的常见的函数及功能介绍

QString的函数:

函数名字函数说明
append()和prepend()append()在字符串的后面添加字符串,prepend()在字符串的前面添加字符串
toUpper()和toLower()toUpper()将字符串内的字母全部转换为大写形式,toLower()将字母全部转换为小写形式
count()、size()和length()都返回字符串的字符个数,这3个函数是相同的,但是要注意,字符串中如果有汉字,一个汉字算一个字符。
trimmed()和simplified()trimmed()去掉字符串首尾的空格,simplified()不仅去掉首尾的空格,中间连续的空格也用一个空格替换。
int indexOf (const QString &str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const其功能是在自身字符串内查找参数字符串str出现的位置,参数from是开始查找的位置,Qt::CaseSensitivity cs参数指定是否区分大小写。
lastIndexOf()函数则是查找某个字符串最后出现的位置。
isNull()和isEmpty()两个函数都判读字符串是否为空,但是稍有差别。如果一个空字符串,只有“\0”,isNull()返回false,而isEmpty()返回true;只有未赋值的字符串,isNull()才返回true。
contains()判断字符串内是否包含某个字符串,可指定是否区分大小写。
endsWith()和startsWith()startsWith ()判断是否以某个字符串开头,endsWith()判断是否以某个字符串结束。
left()和right()left表示从字符串中取左边多少个字符,right表示从字符串中取右边多少个字符。注意,一个汉字被当作一个字符。
section()section()函数的原型为:QString section (const QString &sep, int start, int end = -1, SectionFlags flags = SectionDefault) const其功能是从字符串中提取以sep作为分隔符,从start端到end端的字符串。
shop从字符串的末尾删除 n 个字符。
shoped从左边返回str.size()-n个字符,即是从右边舍弃n个字符
compare比较字符串
at访问字符串中指定位置的字符
insert指定位置插入字符串
mid指定位置,切割指定长的字符串
arg格式化字符串
replace替换字符
setNum数值转QString
  • append()和prepend()

append()在字符串的后面添加字符串,prepend()在字符串的前面添加字符串,如:

QString str1="卖", str2="拐";
QString str3=str1;
str1.append(str2);    //str1="卖拐"
str3.prepend(str2);   //str3="拐卖"
  • toUpper()和toLower()

toUpper()将字符串内的字母全部转换为大写形式,toLower()将字母全部转换为小写形式,如:

QString str1="Hello, World", str2;
str2=str1.toUpper();   //str2="HELLO,WORLD"
str2=str1.toLower();   //str2="hello, world"
  • count()、size()和length()

count()、size()和length()都返回字符串的字符个数,这3个函数是相同的,但是要注意,字符串中如果有汉字,一个汉字算一个字符。

QString str1="NI好"
N=str1.count()       //N=3
N=str1.size()        //N=3
N=str1.length()      //N=3
  • trimmed()和simplified()

trimmed()去掉字符串首尾的空格,simplified()不仅去掉首尾的空格,中间连续的空格也用一个空格替换。

QString    str1="   Are    you   OK?   ", str2;
str2=str1.trimmed();       //str1="Are    you   OK? "
str2=str1.simplified();    //str1="Are you OK? "
  • indexOf ()和lastIndexOf ()

indexOf()函数的原型为:int indexOf (const QString &str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
其功能是在自身字符串内查找参数字符串str出现的位置,参数from是开始查找的位置,Qt::CaseSensitivity cs参数指定是否区分大小写。
lastIndexOf()函数则是查找某个字符串最后出现的位置。

QString str1="G:\Qt5Book\QT5.9Study\qw.cpp";
N=str1.indexOf("5.9");          // N=13
N=str1.lastIndexOf("\\");       //N=21
“\”是转义字符,如果要查找“\”,需要输入“\”。
  • isNull()和isEmpty()

两个函数都判读字符串是否为空,但是稍有差别。如果一个空字符串,只有“\0”,isNull()返回false,而isEmpty()返回true;只有未赋值的字符串,isNull()才返回true。

QString str1, str2="";
N=str1.isNull();   // N=true    未赋值字符串变量
N=str2.isNull();   // N=false   只有"\0"的字符串,也不是Null
N=str1.isEmpty();  // N=true    
N=str2.isEmpty();  // N=true
QString只要赋值,就在字符串的末尾自动加上“\0”,所以,如果只是要判断字符串内容是否为空,常用isEmpty()
  • contains()

判断字符串内是否包含某个字符串,可指定是否区分大小写。

QString str1="G:\Qt5Book\QT5.9Study\qw.cpp";
N=str1. contains (".cpp", Qt::CaseInsensitive);    // N=true,不区分大小写
N=str1. contains (".CPP", Qt::CaseSensitive);      // N=false,区分大小写
  • endsWith()和startsWith()

startsWith ()判断是否以某个字符串开头,endsWith()判断是否以某个字符串结束。

QString str1="G:\Qt5Book\QT5.9Study\qw.cpp";
N=str1. endsWith(".cpp", Qt::CaseInsensitive);     // N=true,不区分大小写
N=str1. endsWith(".CPP", Qt::CaseSensitive);       // N=false,区分大小写
N=str1. startsWith("g: ");                         // N=true,缺省为不区分大小写
  • left()和right()

left表示从字符串中取左边多少个字符,right表示从字符串中取右边多少个字符。注意,一个汉字被当作一个字符。

QString str2, str1="学生姓名,男,1984-3-4,汉族,山东";
N=str1.indexOf (",");                             // N=4,第一个","出现的位置
str2=str1.left(N);                                 //str2="学生姓名"
N=str1.lastIndexOf (",");                         // N=18,最后一个逗号的位置
str2=str1.right(str1.size()-N-1); //str2="山东",提取最后一个逗号之后的字符串
  • section()

section()函数的原型为:
QString section (const QString &sep, int start, int end = -1, SectionFlags flags = SectionDefault) const
其功能是从字符串中提取以sep作为分隔符,从start端到end端的字符串。

QString str2, str1="学生姓名,男,1984-3-4,汉族,山东";
str2=str1. section (",",0,0);                    // str2="学生姓名",   第1段的编号为0
str2=str1. section (",",1,1);                    // str2="男"
str2=str1. section (",",0,1);                    // str2="学生姓名,男"
str2=str1. section (",",4,4);                    // str2="山东"
  • arg
    字符串的格式化,拼接自己想要的字符串。QString的示例:

一般性:

    QString i="1";           // current file's number
    QString total="100";       // number of files to process
    QString fileName="file";    // current file's name
    QString status = QString("Processing file %1 of %2: %3")//status="Processing file 1 of 100: file"
                      .arg(i).arg(total).arg(fileName);

进制的转化:

  QString str;
  str = QString("Decimal 63 is %1 in hexadecimal")
          .arg(63, 0, 16);
  // str == "Decimal 63 is 3f in hexadecimal"
  //63转化为16进制再替换。

增加L

QLocale::setDefault(QLocale(QLocale::English, QLocale::UnitedStates));
  str = QString("%1 %L2 %L3")
          .arg(12345)//直接替换
          .arg(12345)//每三位数字增加,
          .arg(12345, 0, 16);//转化为16进制再替换
  // str == "12345 12,345 3039"
/*'%' 后面可以跟一个 'L',在这种情况下,序列被 a 的本地化表示替换。转换使用默认语言环境,由 QLocale::setDefault() 设置。如果未指定默认语言环境,则使用“C”语言环境。如果基数不是 10,则忽略 'L' 标志。*/

格式输出

    double d = 12.34;
    QString str = QString("delta: %1").arg(d, 0, 'E', 3);
    // str == "delta: 1.234E+01"

arg(QString ,QString ,QString ,…)使用

 QString str;
  str = "%1 %2";

  str.arg("%1f", "Hello");        // returns "%1f Hello"
  str.arg("%1f").arg("Hello");    // returns "Hellof %2"

多个arg使用

QString str;
  str = "%1%3%2";
  str.arg("Hello").arg(20).arg(50); // returns "Hello500"
  //首先,Hello 替换 %1,因此字符串变为“Hello%3%2”。
  //然后,20 替换 %2,因此字符串变为“Hello%320”。由
  //于最大编号位置标记值为 99,因此 50 替换了 %32。

  str = "%1%2%3";
  str.arg("Hello").arg(50).arg(20); // returns "Hello5020"
QString str;
  str = "%1%3%2";
  str.arg("Hello", QString::number(20), QString::number(50)); // returns "Hello5020"
QString result;
  QTextStream(&result) << "pi = " << 3.14;
  // result == "pi = 3.14"
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值