У меня есть 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();
Это компилируется нормально, хотя я не совсем уверен, что делаю это правильно, в файл ничего не записывается, поэтому я предполагаю, что я все еще где-то далеко.