私はQPainterPathを描画しているQGraphicsSceneを持っています。シェイプを保存して、アプリケーションが再び実行されるときに再描画する必要があります。ここでは、私が形状、単純化されたバージョン、および私の書き込みメソッドを描いている方法です。保存して再描画するためにシェイプをシリアライズ
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となります。しかし、これまでのところ、何もファイルに書き込まれていないので、これを得ることはできません。また、私は最初にデータのシリアル化から何を期待するべきかについて完全にはわかっていません。
これについての助力はすばらしいでしょう。
EDIT:フィードバックに基づいて、私は今、私の書き込み方法でこれに
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"); QFileファイル ファイルオープン(QIODevice :: WriteOnly); QDataStream&operator <<(QDataStream&stream、const QPainterPath&path) ? – bauervision
パスを読み込むには、 'out << path;'と 'in >> path;'をそれぞれ書きます。 – dtech
ファイルが存在するということは、そのタスクを実行する権限がない可能性があるため、ファイルを開くことを意味するものではありません。 – eyllanesc