Qt输入输出


QIODevice类是对所有读和写一段字节块的一个抽象。Qt包含了下面的一些子类:

QFile

访问本地文件系统中的文件或嵌入的资源。

QTemporaryFile

创建或访问本地文件系统中的临时文件。

QBuffer

从一个QByteArrary中读数据或将数据写入到一个QByteArray中。

QProcess

运行外部程序并处理进程间的通信。

QTcpSocket

使用TCP协议传输一个数据流。

QUdpSocket

通过网络发送或接收UDP数据流。

其中,QProcess,QTcpSocket,QUdpSocket是顺序文件,只能顺序访问,而QFile,QTemporaryFile, QBuffer是随机访问文件,可随机访问,可使用QIODevice::seek()来重定位文件指针。

另外,Qt也提供了两个更高级的流处理类,可用于向任何QIODevice设备中读或写数据。其中QDataStream用于读写二进制数据,而QTextStream用于读写文本数据。

读写文本

QTextStream负责处理Unicode与系统本地编码格式或任何其他编码格式的转换。QTextStream使用16-位的QChar类型作为数据的基本单元。另外,QTextStream也支持c++的基本数据类型。

使用例子如下所示:

  1. QFile file("sf-book.txt");  
  2. if (!file.open(QIODevice::WriteOnly)) {  
  3.     cerr << "Cannot open file for writing: "  
  4.          << qPrintable(file.errorString()) << endl;  
  5.     return;  
  6. }  
  7. QTextStream out(&file);  
  8. out << "Thomas M. Disch: " << 334 << endl;  

注意:写数据可能要容易些,但读数据就要复杂些,如

out<< "Norway" << "Sweden";如果使用in>> str1 >> str2;读的话,结果却是str1=”NorwaySweden”,而str2为空。因此,读数据必须使用专门的程序解析,QTextStream可以逐字符(QChar)地读取。

可以设置字符编码,如:

stream.setCodec("UTF-8");


QTextStream也支持一些流操作标志,如:

out<< showbase << uppercasedigits << hex <<12345678;

out.setNumberFlags(QTextStream::ShowBase

|QTextStream::UppercaseDigits);

out.setIntegerBase(16);

out<< 12345678;

  • 1
  • 2
  • 下一页

相关内容