QSting常见函数和常见的使用
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"