QT—QString类

17 篇文章 13 订阅

一、隐式共享

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

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值