Frage

Ich habe Probleme beim Lesen und QByteArray Daten in eine Datei zu schreiben.

Mein Ziel ist es QPixmap Daten in eine QByteArray und speichert, dass QByteArray in eine Datei (mit der Fähigkeit, lesen Sie diese QByteArray wieder aus der Datei und in eine QPixmap) zu speichern. Ich möchte von der QPixmap Dokumentation folgenden Code verwenden:

     QPixmap pixmap(<image path>);  
     QByteArray bytes;
     QBuffer buffer(&bytes);
     buffer.open(QIODevice::WriteOnly);
     pixmap.save(&buffer, "PNG"); // writes pixmap into bytes in PNG format

Nach dem Puffer in eine Datei zu schreiben, möchte ich in der Lage sein, die QByteArray abrufen und laden Sie es wieder in eine QPixmap mit dem QPixmap :: loadFromData () Funktion.

Bitte lassen Sie mich wissen, ob eine weitere Klarstellung erforderlich ist (ich bin offen für alternative Ansätze wie auch, ich nur in der Lage sein muß, die QPixmap in eine Datei zu lesen und schreiben :)!);

War es hilfreich?

Lösung

Das wie ein wirklich langer Weg schien es zu tun (aber Ihr Kommentar besser erklärt):

Zum Schreiben:

QFile file("yourFile.png");
file.open(QIODevice::WriteOnly);
pixmap.save(&file, "PNG");

Zum Lesen:

QPixmap pixmap;
pixmap.load("yourFile.png");

QBuffer groß ist, wenn Sie ein QIODevice brauchen und wollen es im Speicher zu halten, aber wenn Sie tatsächlich auf der Festplatte ausgehen, dann ist es eine unnötige mittlere Stufe.

EDIT:

Um pixmaps zu schreiben, und andere Dinge, in einer einzigen Datei würde ich empfehlen, dass Sie ein href verwenden <= „https://doc.qt.io/qt-5/qdatastream.html“ rel = "nofollow noreferrer „> QDataStream .

Zum Schreiben:

QFile file("outfile.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file);
out << QString("almost any qt value object")
    << yourQPixMap << yourQList /* << etc. */;

Dann können Sie zum Lesen in ähnlicher Weise tun:

QFile file("infile.dat");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);
in >> firstQString >> yourQPixmap >> yourList /* >> etc. */;

Sie müssen sicherstellen, dass Sie in die gleichen Objekte lesen, wie Sie sie aus schrieb. Um sich zukünftige Kompatibilität Kopfschmerzen zu sparen, die QDataStream Version explizit festgelegt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top