(2)Qt中的字符串类型

2023-11-13

字节数组(QByteArray)

        在Qt中QByteArray可以看做是C语言中 char*的升级版本。我们在使用这种类型的时候可通过这个类的构造函数申请一块动态内存,用于存储我们需要处理的字符串数据。

1.构造函数

// 构造空对象
QByteArray::QByteArray();

// 将data中的size个字符进行构造, 得到一个字节数组对象
// 如果 size==-1 函数内部自动计算字符串长度, 计算方式为: strlen(data)
QByteArray::QByteArray(const char *data, int size = -1);

// 构造一个长度为size个字节, 并且每个字节值都为ch的字节数组
QByteArray::QByteArray(int size, char ch);
//QByteArray 字节数组的使用
QByteArray array(5, 'A');   //存储5个字符'A'的字节数组
qInfo() << array;
QByteArray name = "yes";
qInfo() << name;

2.数据操作

基本数据操作

const char* str = "hello";
QByteArray name1(str);
qInfo() << "原字符串:" << name1;
//头部追加
name1.push_front("juny, ");
name1.prepend("Hi ");
qInfo() << "头部追加:" << name1;
//尾部追加
name1.push_back(" world");
name1.append("!");
qInfo() << "尾部追加:" << name1;
//指定位置插入
name1.insert(3, "good ");
qInfo() << "3的位置追加:" << name1;
//数据删除
name1.remove(3, 5); //从3的位置删除5个
qInfo() << "3的位置删除5个:" << name1;
//尾部删除
name1.chop(1);
qInfo() << "尾部删除一个:" << name1;
//保留前面,截断后面
name1.truncate(6);
qInfo() << "截断6后面所有字符:" << name1; //包括位置6上的字符

字节数组查找操作 

//清空字节数组
name1.clear();
qInfo() << "清空后:" << name1;
//字符查找
name1 = "I'm cat,is very good, and you?";
qInfo() << "m第一次出现的index:" << name1.indexOf('m');	//返回index
qsizetype pos = name1.indexOf('o');
qInfo() << "o第一次出现的位置为:" << pos;
pos = name1.lastIndexOf('o');
qInfo() << "o最后一次出现的位置为:" << pos;

//判断name1中是否包含一个子串
if (name1.contains("very"))
{
    qInfo() << "name1 中包含 very";
}
//判断name1中是否以I开始以?结束
if (name1.startsWith("I") && name1.endsWith("?"))
{
    qInfo() << "name1中是以I开始以?结束的";
}

 字节数组遍历操作

//字节数组的遍历
qInfo() << "---------------------------";
name1 = "LOVE";
for (auto& v : name1)
{
	qInfo() << v;
}
qInfo() << "---------------------------";
for (int i = 0; i < name1.size(); i++)
{
	qInfo() << name1[i];	//下标法
	qInfo() << name1.at(i); //java风格访问
}
qInfo() << "---------------------------";
QByteArray::iterator iter = name1.begin();
for (iter; iter != name1.end(); iter++)
{
		qInfo() << *iter;
}

 字节数组与其它类型之间的转换

//QByteArray --> char*
qInfo() << name1.data();		//返回值为char*
qInfo() << name1.constData();	//返回值为const char*

//基本数据类型 --> QByteArray
QByteArray num;
num.setNum(1314520, 16);		//将参数一转换为16进制字符串
qInfo() << num;					//"140ed8"

num.setNum(3.1415926, 'e', 3);	//小数位数三位
qInfo() << num;					//"3.142e+00"
num.setNum(3.1415926, 'g', 3);	//有效位数三位
qInfo() << num;					//"3.14"

//静态函数的使用
qInfo() << QByteArray::number(3.1415, 'g', 2);	//"3.1"

//QByteArray --> 基本数据类型
QByteArray sum("666");
qInfo() << sum.toInt();		//666
qInfo() << QByteArray("10000000000").toInt(); //若数据越界,返回值为0

bool isOk = false;
sum = "10";
uint n = sum.toUInt(&isOk, 16);	//16标识的是原来sum中的数为16进制数
if (isOk)
{
	qInfo() << n;		//16
}

字符串(QString)

        QString也是封装了字符串, 但是内部的编码为utf8, UTF-8属于Unicode字符集, 它固定使用多个字节(window为2字节, linux为3字节)来表示一个字符,这样可以将世界上几乎所有语言的常用字符收录其中。  

1.构造函数

// 构造一个空字符串对象
QString();
// 将 char* 字符串 转换为 QString 类型
QString(const char *str);
// 将 QByteArray 转换为 QString 类型
QString(const QByteArray &ba);

2.数据操作 

//QString 是自带编码的
QString name("Junk is very good teacher!Good GOOD GOod!");
qInfo() << name;

//替换
//Qt::CaseSensitivity::CaseInsensitive 替换时忽略大小写
name.replace("good", "bad", Qt::CaseSensitivity::CaseInsensitive);
qInfo() << name;

//格式化字符串
QString _name = "Mary";
qint32 age = 18;
QString job = "打螺丝";
qInfo() << _name + QString::number(age) + job;
qInfo() << QString::asprintf("我是%s,今年%d岁,我的工作是%s",
                             _name.toStdString().data(), age, 
                            job.toStdString().data());
qInfo() << QString("我是%1,今年%2岁,我的工作是%3")
    .arg(_name)
    .arg(age)
    .arg(job);

//输出时间
quint32 second = 3600520;
auto str = QString("%1天,%2:%3:%4")
    .arg(second / 3600 / 24)
    .arg(second % 24, 2, 10, QChar('0')) //输出宽度2  十进制  填充字符
    .arg(second % 60)
    .arg(second % 24 % 60);
qInfo() << str;

QByteArray与QString的区别

//获取本地编码
QString s("哈hello");
qInfo() << "本地编码:" << s.toLocal8Bit();
//获取utf8编码
qInfo() << "utf8编码:" << s.toUtf8();

QByteArray array("go home!"); 
QString str("go home!");
qInfo() << array.size();      //8  字节个数
qInfo() << str.size();		  //8  字符个数
qInfo() << "array:" << array;
qInfo() << "str:" << str;

QByteArray array1("go home!哈");
QString str1("go home!哈");
qInfo() << array1.size();      //11  字节个数
qInfo() << str1.size();		  //9  字符个数
qInfo() << "array:" << array1;
qInfo() << "str:" << str1;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(2)Qt中的字符串类型 的相关文章

随机推荐

  • 浙江大学提出自感知IMU网络精准捕获3D变形

    运动捕捉目前有两种主流方法 视觉捕捉能捕获复杂的三维几何变形 但依赖于昂贵的光学设备并且存在视线遮挡问题 基于IMU的方法虽然简便 但难以捕获细微的3D变形 为了解决这个问题 浙江大学的研究者们提出了一种可配置的自感知IMU传感器网络 解决
  • Rabbitmq入门到进阶看这篇就够了!

    安装前提 安装 erlang windows用户名非中文 可以关注我的公众号 知识追寻者 回复 rabbitmq 获取已经下载好的安装包和配套源码地址 本套教程对应知识追寻者网址 windows安装rabbitmq zszxz com Ra
  • 【IEEE】2022年第四届欧亚计算机科学与信息技术国际会议(FCSIT 2022)

    2022年第四届欧亚计算机科学与信息技术国际会议 FCSIT 2022 重要信息 会议网址 www ecfcsit org 会议时间 2022年12月16 18日 召开地点 中国北京 出版社 IEEE CPS 截稿时间 2022年10月31
  • mqtt.js

    什么是MQTT协议 MQTT Message Queuing Telemetry Transport 消息队列遥测传输协议 是一种基于发布 订阅 publish subscribe 模式的 轻量级 通讯协议 该协议构建于TCP IP协议上
  • [Hadoop] start-dfs.sh ssh报错

    Permission denied publickey 决解方案 相关命令 cd ssh ssh keygen t rsa p cat id rsa pub gt gt authorized keys chmod 0600 authoriz
  • yml基本语法

    1 基本语法 格式要求 k 空格 v 表示一对键值对 空格必须有 以空格的缩进来控制层级关系 只要是左对齐的一列数据 都是同一个层级的 server port 8081 path hello 1 2 3 属性和值也是大小写敏感 2 值的写法
  • R语言绘制PCA双标图、碎石图、变量载荷图和变量贡献图

    1 原论文数据双标图 代码 setwd D Desktop 0000 R 更改路径 导入数据 df lt read table Input data csv header T sep 所需的包 packages lt c ggplot2 t
  • java entityframework,entity-framework – 实体框架核心DbContext和依赖注入

    您可以通过构造函数注入将dbcontext从数据访问层添加到类中来解决此问题 public class Startup public void ConfigureServices IServiceCollection services se
  • Flex布局--骰子布局

    Flex布局 骰子布局 1点骰子 html css box1 width 100px height 100px border 1px solid pink margin right 3px background color ffffff d
  • 2.4g 无线通讯至服务器,WiFi、2.4G、433M、GPRS无线通讯方式的区别

    原标题 WiFi 2 4G 433M GPRS无线通讯方式的区别 WiFi 2 4G 433M GPRS是目前深圳信立重点推荐的且比较常用的无线通讯方式 被大量应用于供排水管网 热力管网 农业大棚 养殖场 馆藏仓库 储罐 实验室 工厂车间
  • 判断字符串非空if(str!=null && str!=""){}

    熟手判断字符串非空一般都会做两次判断 if str null str 或者 if str null str length 0 或者 if str null str equals 为什么要这么麻烦呢 相信大家都遇到过空指针报错的情况 java
  • python异常模块raise的概念以及基本用法

    当程序出现错误 python会自动引发异常 也可以通过raise显示地引发异常 一旦执行了raise语句 raise后面的语句将不能执行 raise 用raise语句来引发一个异常 异常 错误对象必须有一个名字 且它们应是Error或Exc
  • 多视图综述以及图像检索

    1 1 算法分类 1 1 1 协同训练 该方法旨在最大限度地扩展所有观点的相互协议 并达成最广泛的共识 协同训练算法一般过程如图1所示 根据该过程对算法进行交替训练 利用先验信息或相互学习知识 使两种不同视图的一致性最大化 Co train
  • 秦九韶算法详解

    秦九韶算法 秦九韶算法是将一元n次多项式的求值问题转化为n个一次式的算法 比普通计算方式提高了一个数量级 普通算式 a x i 因为多次求幂 消耗了大量的计算时间 我们来分析一下秦九韶算法 例如 求 1 x 2x 2 3x 3 当x 2时的
  • MongoDB 数据库(一):MongoDB的介绍与安装

    目录 一 MongoDB数据库的介绍与安装 1 1 NoSQL数据库简介 1 2 MongoDB 简介 1 2 1 再议业务应用场景 1 2 2 为什么要使用 MongoDB 1 2 3 适用场景 二 安装和使用MongoDB客户端 2 1
  • C++新特性34_递归互斥量recursive_mutex与超时互斥量timed_mutex的使用(递归互斥量解决同一线程重复使用互斥量的需求;超时互斥量设置等待超时机制;解决互斥量阻塞问题)

    接上篇C 新特性33 死锁产生的原因及避免 线程在等待一个永远都不能成功的条件成立 从而进入到陷入休眠 永远不能被唤醒的状态 通过调整锁的使用顺序解决死锁问题 本篇将会学习互斥体的相关知识 C 新特性34 递归互斥量recursive mu
  • 测试开发面试题总结

    测试开发面试题 1 通过列表推导式完成下面数据类型转换 将 a 11 b 2 11 22 33 44 转换为以下格式 li1 a 11 b 2 11 22 33 44 2 Names python java php c c django u
  • 光控照明灯自动开关

    该光控照明灯自动开关电路采用继电器控制方式 可用来控制普通灯泡 日光灯 节能灯等多种照明灯具 可广泛用于车站 码头 机场等夜间需要连续照明的场所 电路结构与特点 如图所示光控照明灯自动开关电路 不仅具有结构简单 稳定可靠和安装方便等优点 而
  • LSTM这一篇就够了

    转自AI大本营https blog csdn net dQCFKyQDXYm3F8rB0 article details 82922386 短时记忆 NN 会受到短时记忆的影响 如果一条序列足够长 那它们将很难将信息从较早的时间步传送到后面
  • (2)Qt中的字符串类型

    字节数组 QByteArray 在Qt中QByteArray可以看做是C语言中 char 的升级版本 我们在使用这种类型的时候可通过这个类的构造函数申请一块动态内存 用于存储我们需要处理的字符串数据 1 构造函数 构造空对象 QByteAr