QString 的使用注意和介绍

目录

"+"号的使用注意事项

indexOf()函数

remove()函数

规定长度左边用‘0’补齐

关于数字和字符串的相爱相杀

字符串转十六进制编码

关于使用replace()替换函数

contains()函数,结合正则表达式,检测包含结构


"+"号的使用注意事项

qt中的+号可以直接连接两个字符串,但是不知道有没有注意过这个问题,下面这个代码它对不对:


QString str;
str.append("str1"+"str2");

这个是错的,运行直接报错,+号的使用要有QString类型变量的参与

以上面为参照,这样写:


QString str;
str.append(QString("str1")+"str2");//将其中一个变成QString

indexOf()函数

直接代码展示:


QString str="0123456789abcdefg";
int indx=str.indexOf("abc");//返回'a'的索引值
int indx=str.indexOf("a");//返回'a'的索引值
int indx=str.indexOf("89abcd");//返回'8'的索引值

就是这样,在查找上相当便利,错误返回-1

remove()函数


QString str="0123456789abcdefg";
str.remove("abc");
str.remove(10,3);

两个效果相同,都是移除了"abc"部分,对比一下一下子就明白用法了

规定长度左边用‘0’补齐


QString str="abc";
str = QString("%1").arg(str, 6, QLatin1Char('0'));//>>"000abc"

关于数字和字符串的常用转换


int a=100;
QString str=QString::number(100,16);//>>str="64",十六进制
a=str.toUInt(nullptr,16);//a=100

//补充:unsigned char len=0x08,转成字符串"08"(上面的只会转成"8")
str=QString(len).toLatin1().toHex();//这样就行了,不用再补齐0

//小数转换
float a=12.3456;
QString str=QString::number(a,'f',2);//str="12.34"
a=str.toFloat();//a=12.34

超级实用的两个用法,经常在用,哈哈哈

字符串转十六进制编码

也就是十六进制(ASCII码)的字符串


QString str1 = "abcd123";
//转ASCII码
QString str2 = str1.toUtf8().toHex();
//转回来
QString str3=QString::fromUtf8(QByteArray::fromHex(QString(dat).toLocal8Bit()))

//下面实测的时候 使用toLatin1()函数不支持中文,反正我转不回来!
//只要原字符串没有包含中文,这三种方式基本没有区别
    qDebug()<<QString("测试").toUtf8().toHex();
    qDebug()<<QString("测试").toLocal8Bit().toHex();
    qDebug()<<QString("测试").toLatin1().toHex();
    qDebug()<<QString::fromUtf8(QByteArray::fromHex(QString("e6b58be8af95").toUtf8()));
    qDebug()<<QString::fromLocal8Bit(QByteArray::fromHex(QString("b2e2cad4").toLocal8Bit()));
    qDebug()<<QString::fromUtf8(QByteArray::fromHex(QString("3f3f").toLatin1()));

关于使用replace()替换函数


QString str="0123456789abcdefg";
str.replace("abc", "");//删除了
//叠加使用:
str.replace("abc", "").replace("efg", "plmsw");//条件允许可以一直叠加
//使用索引
str.replace(10, 3, "");

contains()函数,结合正则表达式,检测包含结构

//正常用法 检测是否包含一个子字符串
QString str = "abcde";
bool ret = str.contains("abc");

//检测是否全部是某个字符
QString str = "AAAAA";
bool ret = str.contains('A',Qt::CaseInsensitive);

//检测是否包含某个结构 68xx68 
//直接进行正则匹配
QString str = "68ab68cde";
bool ret = str.contains(QRegExp("68\\w{2}68"));

检测包含某个结构使用其他方式:
 

//使用QRegularExpression类作为辅助检索
QString str = "68ab68cde";
QRegularExpression regex("68\\w{2}68");
QRegularExpressionMatch match = regex.match(inputTemp);
bool ret = match.hasMatch();

调用QString的函数检测字符串是否全部是某个字符的其他方式:

//初始化一个临时的字符串,进行比对
QString str = "aaaaaaaa";
bool ret = (str == QString(str.length(), 'a'));

//计算目标字符数量进行比对
bool ret = (str.count(compareChar) == str.length());

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值