QT容器
QString类
隐式共享:
隐式数据共享机制去最大化资源有效利用和最小化复制克隆操作。
隐式数据共享类当作为函数参数传递的时候,不仅安全而且效率很高,因为传递的时候只是传递了数据的指针,数据本身只当自己被修改的时候才会去复制。简称写时复制。
数据相同时,执行浅拷贝,仅复制指向数据块的指针,数据不同时则执行深拷贝。
隐式共享技术可以大大降低对内存的开销以及,CPU资源的消耗,很大程度提高应用程序的运行效率。
QString类保存了16位的Unicode值(宽字节),Unicode把所有语言都统一到一套编码里,Unicode提供UTF-8、UTF-16、UTF-32编码方式。
UTF-8以字节为单位对Unicode进行编码,对不同范围的字体使用不同长度的编码。对于0x00-0x7F之间的字符,UTF-8编码与ASCII编码完全相同。
代码示例
代码语言:javascript复制 QString s = "Hello";//Hello数据块引用计数为1
QString s1 = s;//Hello数据块引用计数为2
QString s2 = s;//Hello数据块引用计数为3
//其中一个进行球盖
s2 = "He";//不在引用Hello这个数据块,Hello数据块引用-1,He数据块引用计数为1
QString s3 = s;//Hello数据块引用计数为3
QString s4 = s2;//He数据块引用计数为2
QString s5 = s2;//He数据块引用计数为2
初始化
代码语言:javascript复制 //const char* 初始化
QString s = "hello";
QString str("test");
//QChar数组初始化
QChar cHi[3] = {'h','i'};
QString strHi(cHi,2);Z
//类对象初始化
QString s1 = s;
转换
代码语言:javascript复制 //QString转数字
QString strAge("18");
int nAge = strAge.toInt();//默认是10进制
QString strRate("3.14");
float nRate = strRate.toFloat();
QString strDouble("3.333");
double strD = strDouble.toDouble();
//数字转QString
int year = 2022;
float height = 1.70f;
QString strYear;
strYear = strYear.number(year);
QString strHeight;
strHeight = strHeight.number(height);
QString strTest;
strTest = strTest.setNum(year);
//QString转QByteArray
QString strTom = "Tom";
QByteArray tomArray = strTom.toUtf8();
const char* cTom = tomArray.data();
//QString转QDataTime
QString strTime = "1949-10-01 10:00:00";
QDateTime dtTime = QDateTime::fromString(strTime,"yyyy-MM-dd hh:mm:ss");
//QDateTime转QString
QDateTime dtCurrent = QDateTime::currentDateTime();
QString strCurrent = dtCurrent.toString("yyyy-MM-dd hh:mm:ss");
常用方法
代码语言:javascript复制//QString的拼接
QString s = "对不起";
s = "我是警察。";
s.append("Sorry。");// 结尾添加
//QString格式化
QString s0;
s0.sprintf("%s%d%s","我",19,"岁了。");
QString s1;
s1 = QString("%1%2%3").arg("我").arg(19).arg("岁了。");
//以索引方式访问
QChar qc1= s1.at(1);
//插入字符
QString s2= "我岁了。";
QString s3 = "19";
s2.insert(1,s3.toUtf8());
//在字符串起始位置插入
s2.prepend("今年");
//指定位置进行替换
s2.replace(0,2,"去年");
//去除字符串两端的空格,中间的空格变为一个空格
s2.trimmed();
//查询字符
QString s4 = "哔哩哔哩关注快乐的威猛先生";
//查询是否以xx开头,BOOL
qDebug()<<s4.startsWith("哔哩哔哩");
QString s5 = "tom";
qDebug()<<s5.startsWith("tom",Qt::CaseSensitive);//大小写敏感
//查询是否以xx结尾
qDebug()<<s5.endsWith("威猛先生");//同样可以表明大小写是否敏感
//是否包含
qDebug()<<s5.contains("o");//同样可以表明大小写是否敏感
//比较
qDebug()<<QString::compare("Tom","tom",Qt::CaseInsensitive);//判断字符串是否相等,大小写是否敏感
//分割字符串
QString strTime = "2022/1/17";
QStringList timeList = strTime.split("/");
foreach (QString ss,timeList) {//循环读取容器中的元素,用一个变量来接收读取到的数据
qDebug()<<ss;
}
//截取字符串
QString sFriends = "EnvyuskenyS";
qDebug()<<sFriends.mid(1,1);
//判断NULL字符串isNull(),采用默认构造函数,或者用const char*xx ='