QT—QString类

news2024/11/27 8:36:51

一、隐式共享

隐式数据共享机制去最大化资源有效利用和最小化复制克隆操作。隐式共享类当作为函数参数传递的时候,不仅安全而且效率很高,因为传递的时候只是传递的数据的指针,数据本身只当自己被修改的时候才会去复制。简称写时复制。数据相同时,执行浅拷贝,仅复制指向数据块的指针,数据不同时则执行深拷贝。隐式共享技术可以大大降低对内存的开销及CPU资源的消耗,很大程度提高应用程序的运行效率。

QString类采用16位的Unicode值(两字节)保存数据,Unicode把所有语言都统一到一套编码里,Unicode提供UTF-8UTF-16UTF-32编码方式。UTF-8以字节为单位对Unicode进行编码对不同范围的字符使用不同长度的编码。对于0x00-0x7F之间的字符,UTF-8编码与ASCII编码完全相同。

二、QString的构造与转化

2.1QString的构造方法

//构造
QString s0="Hello";
//拷贝构造
QString s1=s0;
//const char*构造
QString s2("Hello");
//QChar 数组初始化
QChar cHello[5]={'H','e','l','l','o'};
QString s3(cHello,5);//第二个参数表示数组长度

2.2QString的转化方法

QString转数值

QString 转int float double,调用toInt( )、toFloat( )、toDouble( ) 方法,方法第一个参数用来接收是否转化成功,toInt( )方法可以传入第二个参数表示转化成整数的进度(默认十进制)

QString strAge="10";
int iAge = strAge.toInt();
float fAge = strAge.toFloat();
double dAge = strAge.toDouble();

数值转QString 

 number( ) 和setNum( )方法都可以将数字转字符串。不同的是number( ) 方法不会改变调用字符串本身的值,只会返回转化的结果;setNum( )方法不仅会返回转化的结果,还会改变调用字符串的值

int year=999;
QString strYear;
strYear = strYear.number(year);

float height = 180.5f;
QString strWidth;
strWidth.setNum(height);
qDebug()<<"strYear: "<<strYear<<endl<<"strWidth:"<<strWidth;

 

QString转QByteArray

QByteArray是字节数组,QString只需调用toUtf8( )方法即可,toUtf8( )方法会返回一个QByteArray类型

QString strTom = "Tom";
QByteArray tomArray = strTom.toUtf8();//指定编码格式,返回QByteArray类型

QString 与 const char*互转

const char*转QString 只需按照构造方法传入即可;而QString 转const char*需要先转成QByteArray类型,QByteArray继续调用data( )方法。

//const char*转QString
const char* cs="Tom";
QString strTom(cs);

//QString 转 const char*
QString strJerry="Jerry";
QByteArray jerryArray = strJerry.toUtf8();
const char* cJerry = jerryArray.data();

QString 与 日期互转 

调用QDate::fromString()方法,可以将传入的字符串转为日期,第一个参数表示要转换的字符串,第二个参数表示日期格式

//QString转日期
QString strTime = "2022-12-12 21:00:00";
QDateTime dtTime=QDateTime::fromString(strTime,"yyyy-MM-dd hh:mm:ss");
qDebug()<<"QString 转日期:"<<dtTime;

//日期转QString
QDateTime dtCurrent = QDateTime::currentDateTime();//获取当前日期
QString strCurrent = dtCurrent.toString("yy年MM月dd日 hh时mm分ss秒");
qDebug()<<"日期转QString:"<<strCurrent;

三、QString其他常用方法 

3.1 QString拼接

QString可以直接用“+”号拼接字符串,也可也使用“+=”符

QString str = "Hello";
str = str + "World";
str+="!!";
qDebug()<<"str: "<<str;

3.2 QString格式化

使用sprintf( )函数

QString sYear;
sYear.sprintf("%s%d%s%.1f%s","今年是",2022,"年 ",80.1,"亿人");
qDebug()<<"sYear:"<<sYear;

使用arg( )函数

QString sYear;
sYear= QString("%1%2%3%4").arg("今年是").arg(2020).arg("年 ").arg(80.1).arg("亿人");
qDebug()<<"sYear:"<<sYear;

3.3 索引字符

使用at( )方法,可以索引字符串的字符,索引从0位置开始,返回QChar类型

QString sAnimal = "cat";
qDebug()<<"sAnimal第2个位置字符为:"<<sAnimal.at(2);

3.4 插入与替换字符 

 使用insert( )方法可以向字符串中插入数据,insert方法第一个参数表示插入的位置,第二个参数表示插入的字符串(是一个QByteArray类型)

QString sFish="鱼的记忆是:";
qDebug()<<"插入前sFish:"<<sFish;
QString sMem="三秒钟";
//插入数据
sFish.insert(5,sMem.toUtf8());
qDebug()<<"插入后sFish:"<<sFish;

prepend( )方法可以在起始位置插入数据

sFish.prepend("热带");
qDebug()<<"起始位置插入数据sFish:"<<sFish;

replace( )方法可以替换字符串,第一个参数表示替换的起始位置,第二个参数表示替换几个字符,第三个参数表示要替换的字符串。

sFish.replace(7,3,"三个月");
qDebug()<<"sFihs:"<<sFish;

3.5 去除空格 

trimmed( )方法可以去除字符串两端的空格,trimmed( )不会改变调用字符串的值

QString strAnimal = "   Tom and Jerry   ";
qDebug()<<"空格去除前:"<<strAnimal;
strAnimal = strAnimal.trimmed();//不改变原来调字符串的值
qDebug()<<"空格去除后:"<<strAnimal;

simplified( )方法可以去除两端和中间的空格,但是会将中间的空格替换成一个空格 

strAnimal = "  他们     是      好朋友:  "+strAnimal +"      !!  ";
qDebug()<<"空格去除前:"<<strAnimal;

strAnimal = strAnimal.simplified();
qDebug()<<"空格去除后:"<<strAnimal;

3.6 检测字符串 

startsWich(str)方法 检测是字符串是否以str为开头

endsWich(str)方法  检测字符串是否以str为结尾

contains(str)方法 检测字符串是否包含str

上面的检测方法可以传入第二个参数,表示检测时是否考虑大小写,Qt::CaseSensitive表示对大小写敏感(默认值),Qt::CaseInsensitive表示对大小写不敏感

QString sTom = "Tom and Jerry";
qDebug()<<sTom.startsWith("T");
qDebug()<<sTom.startsWith("t",Qt::CaseInsensitive);
qDebug()<<sTom.endsWith("jERrY",Qt::CaseInsensitive);

3.7 字符串比较 

compare( )方法可以进行字符串比较,返回第一个不相等字符的前一个ASCII码减后一个ASCII码的值,返回0表示字符串相等。也可以传入第二个参数表示对大小写是否敏感。

qDebug()<<QString::compare("Tom","tOM",Qt::CaseInsensitive);
qDebug()<<QString::compare("Tom","TOM");//默认大小写敏感

3.8 字符串分割与截取

split( )方法可以进行字符串分割,返回QStringList类型。

QString strTime="1949/10/1";
QStringList timeList=strTime.split("/");
foreach (QString ss, timeList) {
    qDebug()<<ss<<endl;
}

mid( )方法可以截取字符串,第一个参数表示开始截取的位置,第二个参数表示截取的字符数(默认到字符串末尾-1)。

QString sFrinds = "Tom and Jerry";
qDebug()<<sFrinds.mid(0,3);

 

3.9 NULL字符串与空字符串比较。

空字符串表示没有字符,而只有当调用默认构造函数或者用const char* 0 初始化时才是空字符串。

qDebug()<<"采用默认构造函数:";
qDebug()<<QString().isNull();//true
qDebug()<<QString().isEmpty();//true
qDebug()<<"采用空字符串:";
qDebug()<<QString("").isNull();//false
qDebug()<<QString("").isEmpty();//true
qDebug()<<"采用(const char*)0:";
const char*cc='\0';//单引号!!!
qDebug()<<QString(cc).isNull();//true
qDebug()<<QString(cc).isEmpty();//true

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/85939.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AI with ML】第 2 章 :计算机视觉简介

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

前端大串讲,狂神,狂神,p6 01:00

一 概述 前端框架&#xff1a;vue、React、 uniapp(小程序)。前端脚手架&#xff1a;babel-cli、vue cli、webpack-cli服务器&#xff1a;node.js、java后端前端框架的用法&#xff1a; 方式1&#xff1a;用纯前端就可以独立的去完成一些前端项目的开发&#xff0c;并脱离于后…

正点原子 IMX6ULL 自学笔记(未完待续。。。)

一、Makefile 1、语法 目标…… : 依赖文件集合…… 命令 1 命令 2 …… 例子&#xff1a; 生成main可执行文件需要main.o input.o calcu.o&#xff0c;命令是gcc -o main main.o input.o calcu.o main: main.o input.o calcu.ogcc -o main main.o input.o calcu.omain.o: ma…

C++实现对象行为型-迭代器模式

1.1 基本概念 迭代器模式&#xff08;Iterator Pattern&#xff09;&#xff1a;提供了一种方法来访问聚合对象&#xff0c;而不用暴露这个对象的内部。 聚合对象的两个基本功能&#xff1a; &#xff08;1&#xff09;存储内部数据&#xff1b; &#xff08;2&#xff09;…

MySQL表的进阶知识

目录 一、数据库约束 1、not null 2、unique 3、primary key 4、auto_increment 5、default 6、foreign key 7、check 二、插入数据 三、设计表 1、一对一 2、一对多 3、多对多 四、查询 1、聚合查询 a、聚合函数查询 b、group by c、having 2、联合查…

pikachu靶场-8 越权漏洞

越权漏洞 越权漏洞概述 由于没有对用户权限进行严格的判断&#xff0c;导致低权限的账号&#xff08;比如普通用户&#xff09;可以去完成高权限账号&#xff08;比如超级管理员&#xff09;范围内的操作 平行越权&#xff1a;A用户和B用户属于同一级别用户&#xff0c;但各…

虚拟主播怎么做出来的?今日安利:AI虚拟人物怎么弄?

某天&#xff0c;一位品牌店的老板向我寻求帮助&#xff0c;大概内容就是&#xff1a;“他最近要开拓线上店铺的直播渠道&#xff0c;直播时间较长&#xff0c;雇一位主播又费钱又辛苦&#xff0c;想制作一个符合品牌调性的AI虚拟人物来带货。”于是我跟他分享了制作虚拟主播的…

北京医保定点医院2022年版

文章目录概述官方查询方法49家A类定点医院政府公告初始19家2021年4月新增13家A类医院2021年11月新增7家A类医院2022年6月新增10家A类医院定点中医/专科医院定点社区卫生服务机构附录问题医保电子凭证4家定点医院的查询和修改北京医保个人账户资金定向使用北京医院排行榜单概述 …

基于BINN算法的CCPP全路径覆盖算法

1.CCPP整体算法文档 1.1 ccpp基础介绍 全路径覆盖算法&#xff08;CCPP: Complete Coverage Path Planning&#xff09;作为扫地机器人较为关键的组成部分&#xff0c;其问题的本质是&#xff1a;在栅格地图中,全覆盖路径规划问题就演变为寻找机器人的下一个移动位置,只有准确…

java计算机毕业设计ssm职工社保信息管理系统t22xh(附源码、数据库)

java计算机毕业设计ssm职工社保信息管理系统t22xh&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#…

建设银行互联网经营战略优化方案设计

目 录一、绪论 1 &#xff08;一&#xff09;项目背景 1 &#xff08;二&#xff09;项目意义 1 &#xff08;三&#xff09;项目内容和方法 1 二、互联网金融与我国商业银行概述 3 &#xff08;一&#xff09;互联网金融的内涵 3 &#xff08;二&#xff09;互联网金融的功…

【云计算与大数据计算】Hadoop MapReduce实战之统计每个单词出现次数、单词平均长度、Grep(附源码 )

需要全部代码请点赞关注收藏后评论区留言私信~~~ 下面通过WordCount&#xff0c;WordMean等几个例子讲解MapReduce的实际应用&#xff0c;编程环境都是以Hadoop MapReduce为基础 一、WordCount WordCount用于计算文件中每个单词出现的次数&#xff0c;非常适合采用MapReduce进…

描述统计 | 学习笔记 (全)

一.导论 统计学是通过收集&#xff0c;整理&#xff0c;分析&#xff0c;描述数据等手段&#xff0c;以达到推断所测对象的本质&#xff0c;甚至预测对象未来的一门综合性科学。其目的是探索数据的内在数量规律性&#xff0c;以达到对客观事物的科学认识 统计的本业是消化数据…

一种近红外I区荧光染料ICG-CBT 主要应用领域,是药品监督管理局(FDA)批准的体内应用染料

英文名称:ICG-CBT 保存条件:-20℃ 产品类别:化学试剂 结构式&#xff1a; 产品描述&#xff1a;&#xff08;ICG&#xff09;是一种近红外I区荧光染料[1]&#xff0c;是药品监督管理局&#xff08;FDA&#xff09;批准的体内应用染料。其激发和发射波长分别在785 nm、810 nm…

【C++初阶7-stringOJ】上手用一下

前言 本期通过几道OJ题&#xff0c;上手用用string。 1. 把字符串转换成整数 描述 将一个字符串转换成一个整数&#xff0c;要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0 数据范围&#xff1a;字符串长度满足0 ≤ n ≤100 进阶&am…

【读书笔记】万物原理——打开客观世界与主观情感的大门

被尹烨老师推荐种草的&#xff0c;以为是一本讲生命科学的科普书&#xff0c;看上了又以为是说量子物理等高端科学研究的&#xff0c;最后被互补性理论惊到了。这哪里只是一本打开认知客观世界的大门&#xff0c;还让我重识内心。那些看不见摸不着的情感&#xff0c;比如同情心…

数字孪生十大问题有哪些?通俗解释指的是什么?

数字孪生&#xff08;Digital Twins&#xff09;之火热&#xff0c;已经成为了一个不争的事实。数字孪生的概念&#xff0c;起源于制造业&#xff0c;现在已广泛应用到了智慧城市、智慧交通、智慧农业、智慧医疗、智能家居等行业。数字孪生十大问题有哪些&#xff1f;指的是什么…

018 | 服饰颜色与族群名称对颜色认知的影响 | 大学生创新训练项目申请书 | 极致技术工厂

研究目的 本项目以瑶、壮、汉三个民族、六个族群为研究对象&#xff0c;通过七个实验探索服饰颜色与族群名称对颜色认知的影响。重点提出以下两个问题&#xff1a; &#xff08;1&#xff09;服饰颜色是否影响少数民族个体的颜色偏好&#xff1f; &#xff08;2&#xff09;服…

刷完 300 道 LeetCode 题后,我膨胀到要飘起来了!纯正 Java 版

算法题就好像科举考试时代背的八股文&#xff0c;是知识改变命运的代表作。你不刷&#xff0c;不管是校招还是社招&#xff0c;就很过算法题这一关。 我整理的这份 LeetCode 刷题笔记足足 300 道&#xff0c;对算法薄弱和需要提高算法的同学很有帮助。 随便打开一道题解感受下…

【云原生】监视Docker桌面的容器内存和CPU使用情况

目录 一、如何监视Docker桌面的容器内存和CPU使用情况 1、stats命令 2、Docker 统计命令stats是如何工作的 2.1、命令与描述 2.2、OPTIONS 2.3、例子 2.4、格式化 3、满足资源使用扩展 4、如何安装“资源使用情况”扩展插件&#xff1f; 5、总结 一、如何监视Docker桌…