QTexstStream用于读写纯文本以及HTML,XML等文本格式的文件.
此类考虑了Unicode编码与系统本地编码的或其它任意编码之间的转换问题,并且明确地处理因使用不同的操作系统而导致的行尾符之间的转换(windows系统的行尾符是“\r\n”,unix和mac os x系统是“\n”)。
QTexstStream的操作对象是QIODevice,可是QFile,QTEmporaryFile,QBuffer,QProcess,QTcpSocket或者QUpdSocket,此外还可以直接在QString上使用,如:
QString str;
QTextStream(&str)<<oct<<31<<" "<<dec<<25<<endl;
qDebug()<<oct<<31<<" "<<dec<<25<<endl;
qDebug输出的结果是“37 25”,这是因为十进制31的八进制值是37。
因为QString的编码总是Unicode编码,因此使用QString做QIODevice时如果想要用unicode编码就不用再认为设置了。
QTexstStream还有一些类似<iostream>的选项,比如用showbase设置显示二进制、八进制、十六进制的前缀,使用uppercasedigits和hex输出大写十六进制数:
fileOut<<showbase<<uppercasedigits<<hex<<1234567;
也可以使用成员函数来完成这些设置:
fileOut.setNumberFlags(QTextStream::ShowBase|QTextStream::UppercaseDigits);
fileOut.setIntegerBase(16);
代码举例:
#include <QTextStream>
#include <QFile>
#include <QTextCodec>
QString readFile(const QString &fileName)
{
QFile file(fileName);
if(!file.open(QIODevice::ReadOnly | QFile::Text))
return "";
QString str(file.readAll());
return str;
}
void writeFile(const QString &fileName,const QString &context)
{
QFile file(fileName);
if(!file.open(QIODevice::WriteOnly | QFile::Text))
return;
QTextCodec* codec=QTextCodec::codecForName("UTF-8");
QTextStream out (&file);
out.setCodec(codec);
out<<context;
file.flush();
file.close();
}