QString 的使用注意和介绍

458 阅读3分钟

"+"号的使用注意事项

qt中的+号可以直接连接两个字符串,但是需要QString类型的参与,否则会报错两个“char*”不能使用+连接的错误。

QString str;
//错误演示
str.append("str1"+"str2");
//将其中一个变成QString 可解决问题
str.append(QString("str1")+"str2");

indexOf()函数

直接上代码,当查找不到时会返回-1。

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

remove()函数

QString str="0123456789abcdefg";
//两个效果相同,都是移除了"abc"部分
str.remove("abc");//直接匹配字符串移除
str.remove(10,3);//根据索引值以及长度移除

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

QString str="abc";
 
//左对齐
str = str.leftJustified(6, '0', true);//>>"abc000"
 
//右对齐
str = str.rightJustified(6, '0', true);//>>"000abc"
str = QString("%1").arg(str, 6, QLatin1Char('0'));//>>"000abc"

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

int a = 100;
//转十六进制字符串
QString str = QString::number(a, 16); // >> st r= "64"
//转回整型数
a=str.toUInt(nullptr, 16); //a = 100
 
//ps:unsigned char len = 0x08,转成字符串"08"。上面的只会转成"8"
str = QString(len).toLatin1().toHex(); //这样直接转为"08"
 
//小数转换
float a = 12.3456;
QString str = QString::number(a, 'f', 2);//str = "12.34"
a = str.toFloat();//a = 12.34
a = str.toDouble();//a = 12.34
str=QString::number(a, 'f', 4);//str = "12.3400"

字符串转十六进制编码

也就是十六进制(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());