QPainterPath를 그리는 QGraphicsScene이 있는데, 셰이프를 저장하고 응용 프로그램을 다시 실행할 때 다시 그릴 수 있어야합니다. 다음은 어떻게 모양, 단순화 된 버전 및 필기 방법을 그리는 것입니다.저장하고 다시 그리기 위해 셰이프를 serialize하십시오.
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();
}
현재 내 파일은 실행시 기록되지 않습니다.
그러나 모양을 다시 만들 수 있도록이 데이터를 serialize하는 올바른 방법은 무엇입니까?
다시 그리기를 처리 할 수있을 것이라고 생각했지만 직렬화를 충분히 이해하지 못했습니다.
포인트를 직렬화합니까? 포인트가 포함 된 목록?
포인트를 직렬화하면 역 직렬화 할 때리스트에 추가하고 목록의 각 포인트의 위치에 따라 모양을 다시 만들 수 있어야합니다. 예를 들어 위치 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"); 파일open (QIODevice :: WriteOnly); QDataStream & 연산자 << (QDataStream & stream, const QPainterPath & path) ? – bauervision
쓰기 위해서는'out << path;'를 사용하고 경로를 읽으려면'in >> path;'를 사용하십시오. – dtech
해당 파일을 존재한다고해서 해당 작업을 수행 할 수있는 권한이 없기 때문에 파일을 열 수 있음을 의미하지는 않습니다. – eyllanesc