首先来谈谈QTextStream和QDataStream的共同点:QTextStream和QDataStream都是对流进行操作
再来谈谈区别吧:QTextStream只能普通类型的流操作像QChar、QString、int…,其实就很类似我们c或者c++中读写文件的感觉,而QDataStream就厉害了,无论是QTextStream的普通类型的流操作还是一些特殊类型的流操作它都可以办的到比如:QFont、QPoint、QDate之类的几乎所有Qt中支持的所有类型都可以用QDataStream来进行操作,再比如我下面这格代码:
QFile file("binary.bat");
if(file.open(QIODevice::WriteOnly|QIODevice::Truncate)){
//QTextStream out(&file);
int age=18;
out<<QString("周杰伦")
<<QDate::fromString("2000-11-18","yyyy-MM-dd")
<<age;
file.close();
}
它存在错误:
1、.QTextStream不能用来操作QDate类型
//写文件
QFile file("binary.bat");
if(file.open(QIODevice::WriteOnly|QIODevice::Truncate)){
QDataStream out(&file);
int age=18;
out<<QString("周杰伦")
<<QDate::fromString("2000-11-18","yyyy-MM-dd")
<<age;
file.close();
}else{
file.errorString();
}
//读文件
if(file.open(QIODevice::ReadOnly)){
QDataStream in(&file);
QString name;
QDate birth;
int age;
in>>name>>birth>>age;
qDebug()<<"姓名:"<<name
<<"出生日期:"<<birth
<<"年龄:"<<age;
}else{
qDebug()<<file.errorString();
}
对于流的操作如果不会太明白的同学可以去先复习复习c中对于文件的操作,那样可能会更加清晰一些
QFile file("hello.txt");
if(file.open(QIODevice::ReadOnly)){
char buffer[100];
//readLine如果失败会返回-1,成功返回读取的字节数
int n=file.readLine(buffer,sizeof(buffer));
if(n!=-1){
qDebug()<<"长度:"<<n<<endl
<<"内容:"<<buffer<<endl;
file.close();
}else{
qDebug()<<file.errorString();
}
}else{
qDebug()<<file.errorString();
}
//写文件
if(file.open(QIODevice::WriteOnly|QIODevice::Truncate)){
QTextStream out(&file);
double dPI=3.1415925;
int age=100;
out.setFieldWidth(10); //设置字节宽度
out.setFieldAlignment(QTextStream::AlignLeft); //左对齐
out.setRealNumberPrecision(8); //设置整数精度
//QTextStream的流操作符的使用
// out<
// <
// <
out<<"PI:"<<dPI;
file.close();
}else{
qDebug()<<file.errorString();
}