008 关于QString的那点事?

本文介绍了Qt中字符串的各种操作方法,包括字符串的组合、查询、转换及与QbyteArray之间的转换。通过实例展示了如何进行字符串拼接、判断字符串是否包含特定内容、字符串到整数的转换等常见操作。

a)        组合字符串

QString str1 = "Welcome";

str1 = str1 + " to you!";

 

QString str2 = "Hello";

str2 += " World!";

 

str2.append(str1);

 

QString str3;

str3.sprintf("%s","Welcome");

str3.sprintf("%s","to you! ");

str3.sprintf("%s%s","welcome ","to you!");

 

QString str4;

str4 = QString("%1 was bornin %2. %3").arg("John").arg(1982).arg("Nice to meetyou");

 

         //移除字符串两边的空白字符

         QStringstr5 = "      Welcome \t to \nyou!      ";

str5 = str5.trimmed();

//移除字符串两边的空白字符,使用单个空格字符代替字符串中出现的空白字符

str5=str5.simplified();

b)        查询字符串数据

//判断一个字符串是否以某个字符串开头

QString str6 = "Welcome to you!";

if(true == str6.startsWith("Welcome",Qt::CaseSensitive))

qDebug()<<"true"<<endl;

         //判断一个字符串是否以某个字符串结尾

   if(true == str6.endsWith('!'))

       qDebug()<<"true"<<endl;

         //判断一个指定的字符串是否出现过

         if(true== str6.contains("Welcome"))

       qDebug()<<"true"<<endl;

c)        字符串转换

//QString::toInt()将字符串转换为整形数值,类似的函数还有toDouble()/toFloat()/toLong()/toLongLong()等

QString str7 = "123";

bool ok;

int hex = str7.toInt(&ok,16);//转换成功则ok=true, hex=293

int dec = str7.toInt(&ok,10);//转换成功则ok=true, dec=125

d)        与QbyteArray的转换

QString str8 = " Welcome toyou! ";

QByteArray ba =str8.toLocal8Bit();//返回一个ASCII编码的8位字符串

qDebug()<<ba;

ba = str8.toLatin1();//返回一个UTF-8编码的8位字符串(UTF-8是ASCII码的超集,它支持整个Unicode字符集)

qDebug()<<ba;

ba.append("Hello,World!");

qDebug()<<ba.data();

toLacal8Bit()返回一个系统本地编码的8位字符串

void MainWindow::processScanData() { if(scanDataBuffer.isEmpty()){ return; } //查看完整的缓冲区 qDebug() << "Full buffer:" << scanDataBuffer.toHex(); QString scanResult; // 尝试多种编码方式 QTextCodec *codec = QTextCodec::codecForName("UTF-8"); if (codec) { scanResult = codec->toUnicode(scanDataBuffer); qDebug() << "UTF-8 result:" << scanResult; } // 如果UTF-8解码结果不理想,尝试GBK编码(常见于中文环境) if (scanResult.contains(QChar::ReplacementCharacter) || scanResult.isEmpty()) { codec = QTextCodec::codecForName("GBK"); if (codec) { scanResult = codec->toUnicode(scanDataBuffer); qDebug() << "GBK result:" << scanResult; } } // 如果仍然不理想,尝试GB2312 if (scanResult.contains(QChar::ReplacementCharacter) || scanResult.isEmpty()) { codec = QTextCodec::codecForName("GB2312"); if (codec) { scanResult = codec->toUnicode(scanDataBuffer); qDebug() << "GB2312 result:" << scanResult; } } // 如果所有编码都失败,使用Latin1作为最后手段 if (scanResult.contains(QChar::ReplacementCharacter) || scanResult.isEmpty()) { scanResult = QString::fromLatin1(scanDataBuffer); qDebug() << "Latin1 result:" << scanResult; } // 查找终止符位置 int endPos = -1; if (scanDataBuffer.contains('\r')) { endPos = scanDataBuffer.indexOf('\r'); } else if (scanDataBuffer.contains('\n')) { endPos = scanDataBuffer.indexOf('\n'); } if (endPos == -1) { // 没有找到终止符,使用全部数据 endPos = scanDataBuffer.length(); } int skipBytes =6; if(scanDataBuffer.size() > skipBytes){ QByteArray textData = scanDataBuffer.mid(skipBytes); QString scanResult = QString::fromUtf8(textData); // 移除可能的前后不可打印字符 scanResult.remove(QRegularExpression("^[\\x00-\\x1F]+|[\\x00-\\x1F]+$")); scanResult = scanResult.trimmed(); ui->textEdit_5->setText(scanResult); }else { // 数据长度不足,直接尝试解码 QString scanResult = QString::fromUtf8(scanDataBuffer); scanResult.remove(QRegularExpression("[\\x00-\\x08\\x0B-\\x1F]")); scanResult = scanResult.trimmed(); ui->textEdit_5->setText(scanResult); } // 提取完整二维码数据(不包括终止符) // QByteArray completeData = scanDataBuffer.left(endPos); //scanDataBuffer = scanDataBuffer.mid(endPos + 1); // 移除以处理的数据 // // 移除可能的前后空白字符和控制字符 // scanResult = QString::fromUtf8(scanDataBuffer); // scanResult = scanResult.trimmed(); // // 移除可能的前后不可打印字符 // scanResult.remove(QRegularExpression("^[\\x00-\\x1F]+|[\\x00-\\x1F]+$")); // // 显示扫描结果 // ui->textEdit_5->setText(scanResult); // 清空缓冲区 scanDataBuffer.clear(); } 解析出的数据Full buffer: "55aa3000cb00e8818ce4bd8d09e68a80e69cafe59198090ae5ad98e694bee4bd" UTF-8 result: "U?0\u0000?\u0000职位\t技术员\t\n存放??" GBK result: "U?\u0000?鑱屼綅\t鎶?鏈\uE21A憳\t\n瀛樻斁浣" GB2312 result: "U?\u0000????\t???\uE21A??\t\n瀛??句" Latin1 result: "Ua0\u0000?\u0000è\u0081\u008C??\u008D\t?\u008A\u0080?\u009Cˉ?\u0091\u0098\t\n?\u00AD\u0098?\u0094???"
最新发布
09-20
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值