Domanda

sto avendo problemi a leggere e scrivere i dati in un file QByteArray.

Il mio obiettivo è quello di salvare i dati in un QPixmap QByteArray e salvare che QByteArray in un file (con la possibilità di leggere questo QByteArray indietro dal file e in una QPixmap). Voglio usare seguente codice dalla documentazione QPixmap:

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

Dopo aver scritto il buffer in un file, voglio essere in grado di recuperare il QByteArray e caricarlo di nuovo in un QPixmap utilizzando la funzione QPixmap :: loadFromData ().

Per favore fatemi sapere se sono necessarie ulteriori chiarimenti (io sono aperto a soluzioni alternative come bene, ho solo bisogno di essere in grado di leggere e scrivere il QPixmap in un file :)!);

È stato utile?

Soluzione

Che sembrava davvero un lungo cammino da fare per farlo (ma il tuo commento spiega meglio):

Per la scrittura:

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

Per la lettura:

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

QBuffer è grande quando è necessario un QIODevice e desidera mantenere in memoria, ma se si sta effettivamente andare a disco, quindi è un passo centrale inutile.

Modifica

Per scrivere pixmaps, e le altre cose, in un singolo file mi consiglia di utilizzare QDataStream .

Per la scrittura:

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

Quindi, si può fare in modo simile per la lettura:

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

È necessario fare in modo di leggere negli stessi oggetti come li hai scritto fuori. Al fine di salvare se stessi futuri mal di testa di compatibilità, impostare la versione QDataStream esplicitamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top