qt 序列化QVector
时间: 2023-11-04 11:57:11 浏览: 100
要序列化 QVector 对象,你可以使用 QDataStream 类。以下是一个示例代码,演示如何将 QVector 对象序列化到文件中:
```cpp
#include <QFile>
#include <QDataStream>
#include <QVector>
int main() {
// 创建一个 QVector 对象并添加一些数据
QVector<int> vector;
vector << 1 << 2 << 3 << 4 << 5;
// 打开文件以供写入
QFile file("data.bin");
if (file.open(QIODevice::WriteOnly)) {
// 创建 QDataStream 并将其与文件关联
QDataStream out(&file);
// 序列化 QVector 对象
out << vector;
// 关闭文件
file.close();
}
return 0;
}
```
这段代码将 QVector 对象保存到名为 "data.bin" 的文件中。要反序列化 QVector 对象,可以使用类似的方法,只需将 QDataStream 的输入操作符 `>>` 替换为输出操作符 `<<` 即可。
相关问题
qt 序列化与反序列化
在Qt中,可以使用QDataStream类来实现对象的序列化和反序列化。序列化是将对象转换为字节流的过程,而反序列化则是将字节流转换回对象的过程。
要进行序列化,首先需要创建一个QFile对象,并以只写模式打开文件。然后,创建一个QDataStream对象,并将其与文件关联起来。接下来,可以使用QDataStream的<<操作符将对象写入到数据流中。例如,可以使用out << QString("hello world!");将字符串写入数据流中。
要进行反序列化,需要创建一个QFile对象,并以只读模式打开文件。然后,创建一个QDataStream对象,并将其与文件关联起来。接下来,可以使用QDataStream的>>操作符从数据流中读取对象。例如,可以使用in >> str;将字符串从数据流中读取出来。
对于自定义类或数据结构的序列化和反序列化,需要在自定义类中声明并实现友元函数。友元函数可以访问类的私有成员,并将对象的数据写入或读取到数据流中。
需要注意的是,QDataStream只能序列化基本类型,对于其他类型,如自定义类或数据结构,需要在类中声明并实现友元函数。友元函数的声明和实现分别使用<<和>>操作符。
QDataStream支持的数据类型包括bool、qint8、qint16、qint32、qint64、quint8、quint16、quint32、quint64、float、double、const char*、QBitArray、QBrush、QByteArray、QColor、QCursor、QDate、QDateTime、QEasingCurve、QFont、QGenericMatrix、QHash<Key, T>、QIcon、QImage、QKeySequence、QLinkedList<T>、QList<T>、QMap<Key, T>、QMargins、QMatrix4x4、QPair<T1, T2>、QPalette、QPen、QPicture、QPixmap、QPoint、QQuaternion、QRect、QRegExp、QRegularExpression、QRegion、QSize、QString、QTime、QTransform、QUrl、QVariant、QVector2D、QVector3D、QVector4D、QVector<T>等多种类型。[1][2][3]
用QT实现序列化和反序列化
序列化和反序列化是将对象或数据转换为字节流或文本格式以便于存储或传输的过程。在QT中,可以使用QDataStream类实现序列化和反序列化。
序列化:
1. 创建一个QByteArray对象,用于存储序列化后的数据。
2. 创建一个QDataStream对象,并设置设备为QIODevice::WriteOnly,将QByteArray对象作为设备。
3. 使用QDataStream对象的<<运算符将要序列化的数据写入QByteArray对象中。
4. 关闭QDataStream对象。
反序列化:
1. 创建一个QDataStream对象,并设置设备为QIODevice::ReadOnly,将包含序列化数据的QByteArray对象作为设备。
2. 使用QDataStream对象的>>运算符将序列化的数据读取到相应的变量中。
3. 关闭QDataStream对象。
示例代码:
//序列化
QByteArray byteArray;
QDataStream out(&byteArray, QIODevice::WriteOnly);
out << QString("Hello World");
out << 123;
out << 3.14;
out << QVector<int>{1,2,3};
out.device()->seek(0); //重置设备指针
qDebug() << byteArray.toHex(); //输出序列化后的字节流
//反序列化
QByteArray byteArray2 = QByteArray::fromHex("0000000b48656c6c6f20576f726c64007b000000fb4048f5c3");
QDataStream in(&byteArray2, QIODevice::ReadOnly);
QString str;
int i;
double d;
QVector<int> vec;
in >> str;
in >> i;
in >> d;
in >> vec;
qDebug() << str << i << d << vec; //输出反序列化后的数据