定义:

对象转换为二进制——>序列化
二进制转换为对象——>反序列化

序列化:

Qt中实现对象序列化的类是QDataStream,写二进制到流中

QFile fileout("file.dat");         //创建一个文档
fileout.open(QIODevice::WriteOnly | QIODevice::Text);//打开并只写
QDataStream out(&fileout); //序列化文档

QString outstr("this out string");
out<<outstr;
fileout.close();

反序列化:

从流中读入二进制

QFile filein("file.dat");
filein.open(QIODevice::ReadOnly | QIODevice::Text);
QDataStream in(&filein);

QString instr("this out string");
in>>instr;
filein.close();

使用自定义的类来实现序列化

class Widget : public QWidget
{
Q_OBJECT

public:
explicit Widget(QWidget *parent = 0);
~Widget();


friend QDataStream &operator<<(QDataStream &output, const QWidget &w);
friend QDataStream &operator>>(QDataStream &input, QWidget &w);

private:
Ui::Widget *ui;
};

QDataStream &operator<<(QDataStream &output, const QWidget &w)
{
output<<2;
return output;
}

QDataStream &operator>>(QDataStream &input, QWidget &w)
{
int n = 0;
input>>n;
qDebug()<<n;
return input;
}

使用方法

Widget w;//自定义的类

QFile fileout("file.dat");
fileout.open(QIODevice::WriteOnly | QIODevice::Text);
QDataStream out(&fileout);
out << w;
fileout.close();

QFile filein("file.dat");
filein.open(QIODevice::ReadOnly | QIODevice::Text);
QDataStream in(&filein);
in>>w;
filein.close();