QString与QByteArray
QString
1、字符串拼接
void fun(){
QString str1="C";
QString str2=str1+"++";//使用+进行字符串拼接
qDebug()<<str2;//C++
str1.append("#");//使用append()进行字符串拼接,会重新赋值给本身
qDebug()<<str1;//C#
str1.prepend("--");
qDebug()<<str1;//--C#
QString status=QString("使用占位符进行替换,%1,%2").arg(str1).arg(str2);
qDebug()<<status;//"使用占位符进行替换,--C#,C++"
}
2、字符串长度计算
QString str="你好!";
qDebug()<<str.count();//3
qDebug()<<str.length();//3
qDebug()<<str.size();//3
3、字符串判空
QString str1;
QString str2="";
qDebug()<<str1.isNull();//true
qDebug()<<str2.isNull();//false
qDebug()<<str1.isEmpty();//true
qDebug()<<str2.isEmpty();//true
isNull(和isEmpty()两个函数都判断字符串是否为空,但是稍有差别。如果一个空字符串,只有"\0”,isNull()返回false,而isEmpty()返回true;只有未赋值的字符串,isNull()才返回true。
4、判断是否包含子字符串
QString str="Qt";
bool b=str.contains("QT",Qt::CaseInsensitive);//大小写不敏感
bool b2=str.contains("QT",Qt::CaseSensitive);//大小写敏感
qDebug()<<b;//true
qDebug()<<b2;//false
5、数字转换
QString s="123.3";
// int toInt(bool *ok=nullptr, int base=10) const
//@Param ok:是否正确转换 base:进制
qDebug()<<s.toInt();//0
qDebug()<<s.toDouble();//123.3
//数字转QString
double i=123.132;
qDebug()<<QString::number(i);//"123.132"
qDebug()<<QString::number(i,'f',2);//"123.13"
6、提取子串
QString str;
QString csv="forename,middlename,surname,phone";
QString path="/usr/local/bin/myapp";
QString::SectionFlag flag=QString::SectionSkipEmpty;//在分割字符串时跳过空段。
str=csv.section(',',2,2);//第2个开始到第2个截止
qDebug()<<str;//surname
str=path.section('/',3,4);
qDebug()<<str;//"bin/myapp"
str=path.section("/",3,3,flag);
qDebug()<<str;//"myapp" 第一个/左边为0,跳过空段,则第一个/的右边为0
7、字符串分割
QString strs="a,b,c";
QStringList list1=strs.split(',');
qDebug()<<list1;//QList("a", "b", "c")
8、字符串移除
QString t="Ali BaBa";
t.remove(QChar('a'),Qt::CaseInsensitive);//删除a,且大小写不敏感
qDebug()<<t;//"li BB"
QString t1="Ali BaBa";
t1.remove('A');
qDebug()<<t1;//"li BaBa"
QByteArray
在Qt中QByteArray可以看做是c语言中char类型的动态数组。我们在使用这种类型的时候可通过这个类的构造函数申请一块动态内存,用于存储我们需要处理的数据。
1、构造函数
QByteArray()
QByteArray(const char *data,int size =-1)
QByteArray(int size,char ch)
QByteArray(const QByteArray &other)
QByteArray(QByteArray &&other)
eg:
QByteArray a;
QByteArray b("hello");
char buf[]={10,20,30};
QByteArray c(buf,sizeof(buf));
QByteArray d(c);
2、成员访问
QByteArray a;
QByteArray b("hello");
char buf[]={10,20,30};
QByteArray c(buf,sizeof(buf));
QByteArray d(c);
//[]
for(int i=0;i<b.size();i++){
qDebug()<<b[i];
}
//at
for(int i=0;i<c.size();i++){
qDebug()<<(int)c.at(i);
}
//data()
char *data=d.data();
while(*data){
qDebug()<<(int)*data;
data++;
}
3、数组信息
判断是否为空
qDebug()<<QByteArray().isEmpty();//true
qDebug()<<QByteArray().isNull();//true
qDebug()<<QByteArray("").isEmpty(); //true
qDebug()<<QByteArray("").isNull(); //false
获取长度
char buf[]={10,20,30};
QByteArray c(buf,sizeof(buf));
//获取占用内存大小
qDebug()<<"capacity:"<<c.capacity();// 3
c.append(40);
c.append(50);
qDebug()<<"capacity:"<<c.capacity();//14 占用内存大小不一定等于size
qDebug()<<"count:"<<c.count();//5
qDebug()<<"size:"<<c.size();//5
qDebug()<<"length:"<<c.length();//5
4、数据操作
//在尾部追加数据
QByteArray &QByteArray:append(const QByteArray &ba);
void QByteArray:push_back(const QByteArray &other);
//头部添加数据
QByteArray &QByteArray:prepend(const QByteArray &ba);
void QByteArray:push front(const QByteArray &other);
//插入数据,将ba插入到数组第i个字节的位置(从0开始)
QByteArray &QByteArray:insert(int i,const QByteArray &ba);
//删除数据
//删除Len个字符,从第pos个字符的位置开始删除
QByteArray &QByteArray:remove(int pos,int len);
//从尾部删除n个字节
void QByteArray:chop(int n);
/从字节数组的Pos位置将数组截断(前边部分留下,后边部分被删除)
void QByteArray:truncate(int pos);
//将对象中的数据清空,使其为nuLL
void QByteArray:clear();
5、十六进制处理
//QByteArray转换成16进制
QByteArray QByteArray:toHex()const
QByteArray QByteArray:toHex(char separator)const
//16进制转化成QByteArray
[static]QByteArray QByteArray:fromHex(const QByteArray &hexEncoded)
eg:
QByteArray hex=QByteArray("hello").toHex();
qDebug()<<hex.data();//68656c6c6f
QByteArray hex2=QByteArray("hello").toHex(':');
qDebug()<<hex2.data();//68:65:6c:6c:6f
QByteArray text=QByteArray::fromHex("68656c6c6f");
qDebug()<<text;//"hello"
QString与QByteArray之间的转换
1、string与QByteArray
//string转QByteArray
std::string str="hello";
QByteArray qba=QByteArray::fromStdString(str);
qDebug()<<qba.data();//hello
//QByteArray转string
std::string str2=qba.toStdString();
qDebug()<<str2;//"hello"
2、QString与QByteArray
//QByteArray转QString
QByteArray q1=QByteArray("hello");
QString str=QString(q1);
qDebug()<<str;//"hello"
//QString转QByteArray
QByteArray ba1=str.toLatin1();//ASCII编码
qDebug()<<ba1;
QByteArray ba2=str.toLocal8Bit();//使用本地操作系统的编码
qDebug()<<ba2;
QByteArray ba3=str.toUtf8();//utf8
qDebug()<<ba3;