网站首页 > 技术文章 正文
QString是Qt编程中常用的类,除了用作数字量的输入输出之外,QString还有很多其他功能, 熟悉这些常见的功能,有助于灵活地实现字符串处理功能。
QString存储字符串采用的是Unicode码,每一个字符是一个16位的QChar,而不是8位的char,所以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的静态函数number()和asprintf(),也可以使用其公共函数setNum()和sprintf()。
QString的sprintf()函数与C语言里的sprintf()函数的格式是一样的,而setNum()和number()函数使用另外一种格式定义,而且setNum和number有多个重载函数定义,可以处理各种类型的整数和浮点数,在处理整数时还可以指定进制,例如将一个整数直接转换为十六进制或二进制字符串。
如果对于一个浮点数db,希望显示两位小数,下面4行语句都可以实现这个功能。
QString str;
str=QString::number(db,’f’,2);
str=QString::asprintf("%.2f ", db);
str=str.setNum(db, ‘f’, 2);
str=str.sprintf("%.2f",db);
进制转换
将一个整数转换为不同进制的字符串,可以使用QString的函数setNum()和number(),它们的函数原型是:
QString &setNum (int n, int base = 10)
QString number (int n, int base = 10)
其中n是待转换的整数,base是使用的进制,缺省为十进制,也可以指定为十六进制和二进制。下面是读取二进制字符串,然后转换为十进制和十六进制的代码。
QString str = ui->editBin->text(); //读取二进制字符串
bool ok;
int val = str.toInt(&ok, 2); //以二进制数读入
str = QString::number(val,10); //数字转换为十进制字符串
str = str.setNum(val, 16); // 数值转化为十六进制
str = str.toUpper();
字符串添加
append()在字符串的后面添加字符串,prepend()在字符串的前面添加字符串,如:
QString strl=”卖”, str2="拐”;
QString str3=strl;
strl.append(str2); // str1=”卖拐"
str3.prepend(str2); // str3="拐卖"
大小写转换
toUpper()将字符串内的字母全部转换为大写形式,toLower()将字母全部转换为小写形 式,如:
QString strl="Hello, World", str2;
str2=strl.toUpper(); // strl="HELLO, WORLD"
str2=strl.toLower(); // strl="hello, world"
字符串大小
count()、size()和length()都返回字符串的字符个数,这3个函数是相同的,但是要注意,字符串中如果有汉字,一个个汉字算一个字符。
QString strl="NI好";
N=strl.count(); // N=3
N=strl.size(); // N=3
N=strl.length(); // N=3
去除空格
trimmed()去掉字符串首尾的空格,simplified()不仅去掉首尾的空格,中间连续的空格也用一个空格替换。
QString strl=" Are you OK? ", str2;
str2=strl.trimmed(); //strl=" Are you OK?"
str2=strl.simplified(); //strl="Are you OK?"
查找子字符串位置
indexOf()函数的原型为:
int indexOf(const QString &str, int from=0, Qt::CaseSensitivity cs = Qt::CaseSensitive} const
其功能是在自身字符串内査找参数字符串str出现的位置,参数from是开始査找的位置,Qt::CaseSensitivity cs参数指定是否区分大小写。
lastIndexOf()函数则是查找某个字符串最后出现的位置。
QString strl="G:\Qt5Book\QT5.9Study\qw.cpp";
N=strl.indexOf("5.9"); // N=13
N=strl.lastlndexOf("\\"); // N=21
“\”是转义字符,如果要查找需要输入“\\”。
判断是否为空字符串
isNull()和isEmpty()两个函数都判读字符串是否为空,但是稍有差别。如果一个空字符串,只有“\0”, isNull()返回false,而isEmpty()返回true;只有未赋值的字符串,isNull()才返回true。
QString strl, str2="";
N=strl.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 strl=”G: \Qt5Book\QT5.9Study\qw.cpp”;
N=strl.contains (".cpp", Qt::CaseInsensitive); // N=true,不区分大小写
N=strl.contains (".CPP", Qt::CaseSensitive); // // N=false,区分大小写
判断开头结尾
startsWith()判断是否以某个字符串开头,endsWith()判断是否以某个字符串结束。
QString strl="G:\Qt5Book\QT5.9Study\qw.cpp";
N=strl.endsWith(".cpp", Qt::Caselnsensitive); // N=true,不区分大小写
N=strl.endsWith(".CPP", Qt::CaseSensitive); // N=false,区分大小写
N=strl.startsWith("g: "); // N=true, 缺省为不区分大小写
截取字符串
left()表示从字符串中取左边多少个字符,right()表示从字符串中取右边多少个字符。注意, 一个汉字被当作一个字符。
QString str2, strl="学生姓名,男,1984-3-4,汉族,山东";
N=strl.indexOf (","); // N=4, 第一个“,”出现的位置
str2=strl.left(N); //str2=”学生姓名”
N=strl.lastIndexOf (","); // N=18 最后一个逗号的位置
str2=strl.right(strl.size()-N-l); // str2=”山东”,提取最后一个逗号之后的字符串
section()函数的原型为:
QString section(const QString &sep, int start, int end = -1, SectionFlags flags = SectionDefault) const
其功能是从字符串中提取以sep作为分隔符,从start端到end端的字符串。
QString str2, strl="学生姓名,男,1984-3-4,汉族,山东";
str2=str1.section(",",0,0); // str2="学生姓名"
str2=str1.section(",",1,1); // str2="男"
str2=str1.section(",",0,1); // str2="学生姓名,男"
猜你喜欢
- 2024-10-09 C++Qt的字符编码(qt中文编码)
- 2024-10-09 QT(1)- QString(qt qstring c_str)
- 2024-10-09 C++跨平台库QT学习5 字符串处理类QString的使用
- 2024-10-09 QString的解析与常用功能(qstring::number 保留2位小数)
- 2024-10-09 Qt编程进阶(93):字符串编码格式转换
- 2024-10-09 【Qt5】QString的成员函数arg(qt arg函数)
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- js判断是否空对象 (63)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- phprequire_once (61)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)