Qt4: schreiben QByteArray-Datei mit dem Dateinamen?
Ich habe Probleme in Qt 4 mit dem schreiben, um nicht-text-Dateien. Ich habe ein QByteArray data und ich wollen speichern Sie es auf einer Datei mit dem Namen "some_name.extern" in ein bestimmtes Verzeichnis: "C://MyDir". Wie kann ich dies tun? Beachten Sie, dass der Inhalt kein Text.
Ist das format "GIF", und es wird nicht unterstützt von Qt.
QImage mainImage;
if (!mainImage.loadFromData(aPhoto.data))
return false;
if (!mainImage.save(imageName, imageFormat.toUtf8().constData()))
return false;
Will ich irgendwie umgehen, dass die Einschränkung!
- Warum zeigen Sie nicht, was Sie bisher ausprobiert haben?
- Hier was ich zu tun habe. Aber die speichern-Funktion gibt false zurück, da der nicht unterstützten format. Also ich denke, wenn ich sparen könnte, die byteArray-Daten, ohne Umweg über QImage, kann ich erfolgreich sein?!
- Sind Sie wirklich sicher, dass Sie müssen die Bilder im GIF-format? Mit anderen Formaten, z.B. PNG, macht das Leben einfacher mit Qt.
- Die GIF-Datei-format wird als veraltet betrachtet heute. PNG ist die bessere alternative.
- Ok, wissen Sie, wie Sie speichern Sie es in einem anderen format? Ja, das andere format ist eine option, zu. Danke. (PNG, JPG... was auch immer)
- Einfach geben Sie "PNG" als format für die save () - Funktion. Es spielt keine Rolle, was war das ursprüngliche format.
- Danke, Roku! Es funktioniert, wie ich wollte!!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schreiben ein QByteArray zu einer Datei:
In Qt-5 (5.1 und höher) verwenden, sollten Sie QSaveFile statt beim speichern eine neue komplette Datei (im Gegensatz zum ändern von Daten in einer vorhandenen Datei). Dies vermeidet die situation, wo Sie verlieren die alte Datei, wenn der Schreibvorgang fehlschlägt:
Erinnern, um Fehler zu überprüfen, natürlich.
Beachten Sie auch, dass, obwohl diese Ihre Frage beantwortet, ist es wahrscheinlich nicht dein problem lösen.
write()
Funktion schreiben, die das gesamte array.QIODevice
Typen aber es könnte darauf hindeuten, dass das Gerät einfach nicht halten alle Daten, in dem Fallwrite()
würde nur wieder die Menge der bytes, die Tat passen, aber es war kein Fehler. Ich bin mir nicht sicher, was passiert, wenn das schreiben in eineQFile
Ergebnisse in allen Speicherplatz zur Neige. Ich denke, es würde return -1 in diesem Fall. Aber so oder so, würden Sie nicht eine Schleife. Sie würde einfach anrufenwrite()
einmal und überprüfen, ob der Rückgabewert ist< data.size()
, in diesem Fall können Sie Sie behandeln, als Fehler.Können Sie QDataStream zum schreiben binärer Daten.
Dann verwenden
oder