我有一个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();
编译没有问题,即使我不能完全肯定我做了正确的,什么都没有写到文件,所以我认为我还在某个地方。
感谢您的回复。我在我的应用程序中有一个作为成员变量的路径。我正在检查file.exists()是否总是返回true,所以我认为这可能是另一个问题。我可以使用: QFile文件(“../ path.dat”); 文件。开放(QIODevice中::只写); (QDataStream&stream,const QPainterPath&path) ? – bauervision
你可以使用'out << path;'来分别写入'in >>路径;'来读取路径。 – dtech
该文件存在并不意味着您可以打开它,因为您可能没有执行该任务的权限。 – eyllanesc