我有一个 QGraphicsScene 我正在绘制一个 QPainterPath,我需要能够保存形状,并在应用程序再次运行时重新绘制它。这是我如何绘制形状、简化版本和我的写入方法。
void drawPath(){
QPoint p1 = QPoint(10, 20);
writePointsToFile(p1);
QPoint p2 = QPoint(25, 30);
writePointsToFile(p2);
QPoint p3 = QPoint(40, 60);
writePointsToFile(p3);
QPainterPath path;
path.moveTo(p1.x(), p1.y());
path.lineTo(p2.x(), p2.y());
path.lineTo(p3.x(), p3.y());
}
void writePointsToFile(QPoint point){
QFile file("../path.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file);
out << point;
file.close();
}
目前,我的文件在运行时永远不会被写入。
但除此之外,序列化这些数据以便我可以重建形状的正确方法是什么?
我以为我能够处理重新绘制,但我对序列化的理解不够好。
我要序列化积分吗?包含点的列表?
我的想法是,如果我序列化这些点,当我反序列化时,我将它们添加到一个列表中,我应该能够根据列表中每个点的位置重新创建形状;即位置 0 的点是 p1,点 1 的点是 p2,等等。但我无法做到这一点,因为无论如何都没有将任何内容写入文件。另外,我不完全确定首先对数据序列化有什么期望。
对此的任何帮助都会很棒。
编辑:根据反馈,我现在正在我的写方法中尝试这个
QFile file("../path.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file);
QDataStream & operator << (QDataStream& file, const QPainterPath& path);
out << path;
file.close();
这编译得很好,即使我不完全确定我做对了,没有任何东西被写入文件,所以我假设我还在某个地方。