1.QString----->c++ string---------->char*
QString arr; arr.toStdString().data();
2.QString------->QByteArray
方法一 :QString str; str.toUtf8 (转成utf8编码)
方法二:QString str; str.toLocal8Bit() (转成本地编码)
3.QByteArray--------->char*
QByteArray a; char*b=a.data()
4.char*------------------>QString
char*arr="hhh"; QString s=QString(arr);
5.QByteArray-------------->QString
QByteArray*arr="hhh"; QString s=QString(arr);
1.QTQDataStream的用法(数据流(二进制))
void Widget::write_data()
{
QFile f("./1.txt"); //创建文件1.txt
QDataStream flu(&f); //文件流与文件关联
bool isok=f.open(QIODevice::WriteOnly);
if(isok==false)
return ;
flu<<"中国"<<24; //往数据流中写数据,相当于往文件里写数据
f.close();
}
void Widget::read_data()
{
QFile f("./1.txt");
QDataStream flu(&f); //创建数据流,和file文件关联
bool isok=f.open(QIODevice::ReadOnly);
if(isok==false)
return;
char* str;
int count;
flu>>str>>count; //往数据流中读数据,相当于往文件里读数据
qDebug()<<str<<count;
f.close();
}
总结:以什么类型写就以什么类型读(否则会读不到) 读的数据与写数据顺序一样 读写一定要记得关闭文件(这个很容易忘)
2.QTextStream的用法
void Widget::write_data()
{
QFile f("./2.txt"); //创建文件2.txt
QTextStream flu(&f); //文本流关联
flu.setCodec("UTF-8");
bool isok=f.open(QIODevice::WriteOnly);
if(isok==false)
return ;
flu<<QString("中国")<<24;
f.close();
}
void Widget::read_data()
{
QFile f("./2.txt");
QTextStream flu(&f);
bool isok=f.open(QIODevice::ReadOnly);
if(isok==false)
return;
QString str;
int count;
flu.setCodec("UTF-8");
flu>>str>>count;
qDebug()<<str<<count;
f.close();
}
#总结 可以指定字符编码读是什么编码写就是什么编码 不能读char*类型
3.QBuffer 内存文件的操作
QByteArray arr;
QBuffer buff(&arr);
bool isok=buff.open(QIODevice::WriteOnly);
if(isok==false)
{
return ;
}
buff.write("vdvd");//写到内存
buff.write("百度");
// qDebug()<<buff.buffer()<<endl;//打印缓冲区的内容
// qDebug()<<arr<<endl;//打印字节数组的内容
//QDataStream 与 QBuffer的操作(都是二进制)
buff.close();
QBuffer buff1;
buff1.open(QIODevice::WriteOnly);
QDataStream s(&buff1);
s<<QString("热热");
buff1.close();
buff1.open(QIODevice::ReadOnly);
QDataStream s1(&buff1);
QString str;
s1>>str;
qDebug()<<str;
buff1.close();