在QDataStream中序列化类
Serializing class in QDataStream
本文关键字:序列化 QDataStream 更新时间:2023-10-16
我试图保存3个QVector<QPoint>
和一个int与QDataStream
。
我超载了operator<<()
,但如果我试图保存一些东西,没有出现在文件中。
我检查了QVector
是否为空,但它不是。
下面是CloudData类的operator<<
和save()
函数:
CloudData.h
#include <QDataStream>
#include <QVector>
#include <QPoint>
class CloudData
{
public:
CloudData();
QVector<QPoint> getPolyVector() const;
QVector<QPoint> getPathPointVector() const;
QVector<QPoint> getSupPointVector() const;
int getRandSeed() const;
bool save(QString);
friend QDataStream& operator <<(QDataStream &dataStream, const CloudData &cd)
{
dataStream << cd.getPolyVector() << cd.getPathPointVector()
<< cd.getSupPointVector() << cd.getRandSeed();
return dataStream;
}
private:
QVector<QPoint> m_polyVector;
QVector<QPoint> m_pathPointVector;
QVector<QPoint> m_supPointVector;
int m_randSeed;
};
CloudData.cpp
#include "clouddata.h"
#include <QFile>
CloudData::CloudData()
{
}
void CloudData::setPolyVector(QVector<QPoint> pVec)
{
m_polyVector = pVec;
}
void CloudData::setPathPointVector(QVector<QPoint> ppVec)
{
m_pathPointVector = ppVec;
}
void CloudData::setSuppPointVector(QVector<QPoint> spVec)
{
m_supPointVector = spVec;
}
void CloudData::setRandSeed(int randSeed)
{
m_randSeed = randSeed;
}
bool CloudData::save(QString filename)
{
QFile file(filename);
if(!file.open(QIODevice::WriteOnly))
return false;
QDataStream out(&file);
out.setVersion(QDataStream::Qt_4_8);
out << this;
file.close();
return true;
}
最后,这里是调用save()
的函数:
void CloudWidget::saveCloudData()
{
QString filename = QFileDialog::getSaveFileName(this,tr("Save cloud clutter data"),
"/Users/Admin/Downloads/", "Cloud Clutter Data (*.ccd)");
m_cloudData.setPolyVector(m_polygon);
m_cloudData.setPathPointVector(m_pathPointVector);
m_cloudData.setSuppPointVector(m_supPointVector);
m_cloudData.save(filename);
}
我相信这句话:
out << this;
save()方法中的应该是:
out << *this;
& lt; & lt;操作符作用于类的引用,而不是指向类的指针。
下面的测试代码说明了这一点:#include <QFile>
#include <QTextStream>
#include <QDebug>
class StreamTest
{
public:
StreamTest() { var1 = "var1"; var2 = "var2"; }
QString var1;
QString var2;
friend QTextStream& operator <<(QTextStream &textStream, const StreamTest &st)
{
textStream << st.var1 << st.var2;
return textStream;
}
void save(void)
{
QString str_1;
QTextStream text_stream_1(&str_1);
text_stream_1 << this;
qDebug() << str_1;
QString str_2;
QTextStream text_stream_2(&str_2);
text_stream_2 << *this;
qDebug() << str_2;
}
};
int main(int argc, char *argv[])
{
StreamTest st;
st.save();
}
运行代码生成如下输出:
"0x7fff18070c10"
"var1var2"
this打印指针的值,而*this打印期望的输出。
相关文章:
- 如何在C++中序列化结构数据
- 序列化,没有库的整数,得到奇怪的结果
- 如何知道QDataStream不能反序列化某些内容
- 如何使用Python从C++中读取谷物序列化数据
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 自定义对象的dlib序列化在gcc中失败
- C++boost序列化多态性问题
- 增强基于 XML class_id的反序列化
- 使用 QDataStream 对原始数据进行反序列化
- 如何从 QDataStream 中读取多个相同类型的序列化对象
- QDataStream 无法序列化数据
- QDataStream和quint16序列化的怪异
- Qt 序列化布尔值与 QDataStream
- Qt 序列化,非成员 QDataStream & operator<<
- Qt 序列化。QDataStream & operator<< for base class QPolygonF
- 使用 QDataStream 序列化自定义类会导致 C2679 错误
- 使用自定义类的Qlist作为成员序列化类(使用QDataStream)
- 尝试使用QDatastream序列化自定义类的QList时出现错误C2679
- 在QDataStream中序列化类