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

今天在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 truestr.append("");
str.isNul();    // return false
str.isEmpty();  // return true

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

qt字符串之 QString详解相关推荐

  1. qstring如何初始化_学习QT之QString详解

    学习QT之QString详解 QString类保存16位Unicode值,提供了丰富的操作.查询和转换函数.该类还进行了使用隐式共享.高效的内存分配策略等多方面的优化. 一.字符串常用操作 字符串的操 ...

  2. Qt QFile文件操作详解

    Qt QFile文件操作详解 很多应用程序都需要具备操作文件的能力,包括对文件内容进行读/写.创建和删除文件等,甚至某些应用程序的诞生纯粹是为了操作文件,比如 WPS Office.PDFedit 等 ...

  3. Qt QPushButton按钮用法详解

    Qt QPushButton按钮用法详解 按钮是 GUI 开发中最常用到的一种控件,作为一款著名的 GUI 开发框架,Qt 提供了很多种按钮,比如 QPushButton(普通按钮).QRadioBu ...

  4. python对输入的字符串进行解析_python数据类型_字符串常用操作(详解)

    这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...

  5. QT:常用函数详解--常用操作记录(个人笔记)

    QT:常用函数详解(个人笔记) PS:一下内容个人笔记,要求自己看懂,随笔,阅读体验会很差很差! Qt setContentsMargins()函数 函数原型:void QLayout::setCon ...

  6. python中字符串乘法_python leetcode 字符串相乘实例详解

    给定两个以字符串形式表示的非负整数 num1 和  num2 ,返回  num1 和  num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2", ...

  7. JVM——字符串常量池详解

    关注微信公众号:CodingTechWork,一起学习进步. 引言   在Java开发中不管是前后端交互的JSON串,还是数据库中的数据存储,我们常常需要使用到String类型的字符串.作为最常用也是 ...

  8. python加密字符串小写字母循环后错两位_python数据类型_字符串常用操作(详解)

    这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...

  9. Qt图形视图框架详解-安晓辉-专题视频课程

    Qt图形视图框架详解-12227人已学习 课程介绍         介绍Qt中的Graphics View Framework,涉及View.Scene.Item的关系,如何自定义QGraphicsI ...

最新文章

  1. 深思:外卖背后的人工智能算法揭秘
  2. Foundation框架介绍
  3. beyond compare 4 的30天试用期已过-解决方法
  4. boost::local_time模块实现航班飞行时间的测试程序
  5. 传统的线性降维方法效果不佳。_10分钟数据降维入门
  6. Python 3.9.0 首个迭代版本发布了
  7. (48)FPGA面试技能提升篇(数字采样、射频存储、频谱搬移)
  8. 大项目微服务架构设计
  9. heap堆(自己做菜)(空间很大),stack栈(餐馆吃饭)(能从栈获得的空间较小),static(全局变量和静态变量的存储),文字常量区,程序代码区,以及ROM,RAM,Flash
  10. Android 四大组件学习之Activity二
  11. 第三方模块:Python3 OS 文件/目录方法
  12. matlab的四个取整函数!
  13. 感觉中国程序员前景一片灰暗,是这样吗?Android开发工程师为你答疑解惑
  14. ei加声调怎么加_大班拼音ei的教案
  15. 谷歌大脑2017技术研究总结 | Jeff Dean执笔(附论文 数据集)
  16. c语言null是什么意思,c语言null什么意思?
  17. 爬取相关机构电话号码及地址
  18. UiPath Excel 复制粘贴
  19. FreeMind 思维导图的使用
  20. 生活随记-如何健康摄入果糖

热门文章

  1. [LeetCode]495. 提莫攻击
  2. 你们就感兴趣的“游戏测试”来啦
  3. 读取parquet_Java读写Parquet格式的数据的方法
  4. 【数学】B094_LC_旋转函数(F(k+1) 和 F(k) 错位相减+递推)
  5. Windows server 2012 r2系统桌面不显示我的电脑
  6. vue3.2+js,web端canvas实现手写签名
  7. 网络相关篇Linux一句话精彩问答--2006/09/08更新--20060908pdf版本下载
  8. ubuntu18.04安装bazel
  9. 第三局 猥琐发育 黑铁晋级赛了 加油
  10. Flutter 混合开发和组件化实践 | 开发者说·DTalk