qt字符串之 QString详解

前言 之 为什么写这篇文章?

今天在QT项目开发中,需要进行大量的字符串QString操作,但是之前没有系统性的了解过相关操作,都是需要什么函数从网上找,所以今晚回家后充充电,顺便整理一下字符串类《QString》的相关操作,

1,QString 操作符

首先,标准的c++提供了两种字符串: 1,c语言风格以 ‘\0’ 字符结尾的字符数组;另一种是子符串类string,Qt使用的QString更强大:提供丰富的操作,查询和转换函数,以及高效的内存分配策略等多方面的优化

1.1, QString 提供了 “+”, “+=” 二元操作符,例:
QString str = "Hello ";
str = str+ "World!";		// str = "Hello World!"; 
QString str1 = "Hello, ";
str1 += "QT!";			// str1 = "Hello, QT!"; 
//  特意查了一下 其构造函数原型   
//  const char* 类型的指针被QString::dromAscii()函数转换为Unicode编码。
QT_ASCII_CASR_WARN_CONSTRUCTOR QString::QString(const char* str);
//  如果字符串有经过QObject::tr() 进行处理,建议使用 QT_CAST_FROM_ASCII 宏变量进行屏蔽这个构造函数
1.2, 除了上面的 “+=” 操作符,QString::append() 函数一样可以实现在末尾追加一个字符串,
QString str = "Hello, ";
QStying str1 = "江一";
str.append(str1);			//str = "Hello, 江一";
str1.append(",小白");		//str1 = "江一,小白"; 
1.3, QString::arg()函数可以进行对字符串的组合,该函数的重载可以处理很多数据类型,比QString::sprintf() 更好用(个人意见),以下时两者的对比
QString str;
str.sprintf("%s","Hello");				// str = Hello
str.sprintf("%s,%s","world","hello");	//	str = world,hello ;

QString strArg;
strArg = QString("%1 have been in Suzhou for %2 years").arg("江一").arg(2021); 
// strArg = "江一 have been in Suzhou for 2021 years";
1.4, QString 还提供了其他字符串的组合方法
QString::prepend(); // 在原字符串的开头位置插入另一个字符串
QString::insert();	// 在原字符串的特定位置插入另一字符串
QString::replace();	// 用给定的字符串替代原来的字符串的某一些字符
QString::trimmed(); // 清除字符串的两端空白字符('\n' \r' '\t' ' ' 等)
QString::simplified();	//  清除字符串两端的空白字符,用单个的空格字符 ' ' 替代字符串里面的空白字符

2,QString 查询

2.1, 查询字符串中的字符等操作也会常用到,
QString str = "Hello, QString";
// 判断字符串是否以某个字符串开头
str.startsWith("Hello",Qt::CaseSensitive);	// return true ,这里需要注意:第二个参数确定是否要大小写敏感
str.startWith("QString",Qt::CaseSensitive);	// return false
// 判断字符串是否以谋某个字符串结尾的
str.endsWith("QString",Qt::CaseSensitive);	// return true
// 判断一个字符串有没有出现过
str.contains("Hello",Qt::CaseSensitive);	// return true
2.2, 今天做的项目中,用了特别多的字符串转换,,主要是数值类型转换用的多,比如int转double等
bool ok;					// bool用于以下转换返回的状态,成功为true,否则为false
QString str = "3579"; 
int dec = str.toInt(&ok,10);	// ok = true, dec = 3579; 
int hex = str.toInt(&ok,16);	// ok = true, hex = 13689; 整型 十六进制转十进制
// 注意:第二个参数指定转换基数设置为0时,将使用的是c语言的转换:以 '0x' 开头,基数为16, '0'开头,基数为8, 其他情况一般为10
double dDec = str.toDouble(&ok,10);	// ok = true, dDec = 3579.0 (这里我补一个0,具体可能不止补一个0,待验证)
2.3, 接下来就是字符编码集的问题,因为我ui界面用了QLineEdit,QTextBrowser等输入框,内部需要使用TCP定时发送规定好的数据(前文写的随机不重复的数据),所以我用到了具有字节数据的QByteArray类,它既可以储存原始字节,也可以储存以 ‘\0’ 结尾的 8位字符串,比QString 的const char* 更方便,之间也有转换函数(字符集转换)
QString::toAscii();	 	 // 返回一个ASCII编码格式的8位字符串
QString::toLatinl();	 // 返回一个Latin-1(ISO8859-1)编码的8位字符串
QString::toUtf8();	  	 // 返回一个UTF-8 编码格式的8位字符串(UTF-8支持整个Unicode字符集)
QString::toLoval8Bit();	 // 返回系统本地编码的8位字符串
// 例:
Qstring str = "Welcome to jiangyi's blog!";
QByteArray array = str.toAscii();	// 将Unicode编码格式的字符串转换为ASCII字符串,储存在array中

3,QString字符串的判空等操作

//  仔细对比以下代码,大家和我一样容易犯的错 '\0' <空字符串未必是一个NULL的字符串>
QString str;
str.isNull();	// return true
str.isEmpty();	// return true

str.append(""); 
str.isNul();	// return false
str.isEmpty();  // return true

以上就是我整理的全部内容啦!,若有不足,欢迎各位大佬@评论区指点更正或补充,感谢~!欢迎大家一起交流学习

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Qt中,可以使用QString类的toInt()函数将字符串转换为数字。这个函数接受一个可选的基数参数,用于指定字符串的进制。默认情况下,基数为10,表示十进制。如果需要将字符串转换为其他进制的数字,可以使用QString类的setNum()函数将数字转换为字符串,并指定所需的进制。例如,要将十进制字符串转换为十六进制字符串,可以使用setNum()函数的第二个参数将基数设置为16。然后,可以使用toUpper()函数将结果转换为大写,并使用setText()函数将结果设置为控件的文本。下面是一个示例代码片段,演示了如何在Qt中实现字符串转数字的功能: ```cpp void Widget::on_btnDec_clicked() { QString str = ui->editDec->text(); int val = str.toInt(); // 将字符串转换为十进制数字 str = QString::number(val, 16); // 将数字转换为十六进制字符串 str = str.toUpper(); // 将结果转换为大写 ui->editHex->setText(str); // 设置十六进制字符串到相应的控件 str = QString::number(val, 2); // 将数字转换为二进制字符串 ui->editBin->setText(str); // 设置二进制字符串到相应的控件 } ``` 注意,以上代码是一个槽函数,当按钮被点击时执行。在代码中,editDec是一个QLineEdit控件,用于输入十进制数。editHex和editBin分别是用于显示转换结果的QLineEdit控件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [初识QT(二十六)——Qt字符串与数字之间的转换方法详解](https://blog.csdn.net/qq_35789421/article/details/99436843)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江一_a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值