Qt

Qt QDataStream类

Qt QDataStream类在帮助文档中,是这样解释的:

The QDataStream class provides serialization of binary data to a QIODevice.

翻译为:QDataStream类提供了序列化的二进制数据给QIODevice.

QDataStream使用二进制存取数据,这就使得他存放的数据非常小,而且可以存放各种样的数据。

与之相对应的是:QTextStream类。在帮助文档中的解释如下:

The QTextStream class provides a convenient interface for reading and writing text.

翻译为:QTextStream类提供了一个非常方便的接口,用于读写文本。

 

QTextStream的优点和缺点都很明显。有点是读写方便,因为只能存取文本文件,而缺点也是这样。

 

举例:

QDataStream的输入,存放在test.dat文件中:

QString name = "Bill";

QImage image("test.jpg");//在工程文件中需要加入test.jpg文件
QMap<QString,QColor> map;
map.insert("red",Qt::red);
map.insert("green",Qt::green);
map.insert("blue",Qt::blue);

QFile file("test.dat");
if(!file.open(QIODevice::WriteOnly))
{
	QMessageBox::information(this,"提示","文档建立出错");
	//如果不存在test.dat时,因为打开方式是WriteOnly,所以会建立这样一个文档
	return;
}

QDataStream out(&file);
out.setVersion(QDataStream::Qt_4_1);//设置版本号

out<<name<<quint32(age)<<image<<map;
/*
quint32:
Typedef for unsigned int.
This type is guaranteed to be 32-bit on all platforms supported by Qt
翻译为:为unsigned int
翻译为:这种类型保证在所有被Qt支持的平台都是32位,即4字节
*/

QDataStream类的输出:

QString name;
quint32 age;
QImage image;
QMap<QString,QColor> map;

QFile file("test.dat");
if(!file.open(QIODevice::ReadOnly))
{
	QMessageBox::information(this,"提示","不存在此文件");
	//当不存在test.dat时,会打开错误
	return;
}

QDataStream in(&file);
in>> name >> age >>image >>map;
//写入的顺序必须和读取的顺序一致

 

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部