Pergunta

Estou tendo problemas para ler e escrever dados qbytearray em um arquivo.

Meu objetivo é salvar os dados QPIXMAP em um QBYTearray e salvar esse QBYTearray em um arquivo (com a capacidade de ler esse QBYTearray de volta do arquivo e entrar em um QPIXMAP). Quero usar o seguinte código da documentação 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

Depois de gravar o buffer em um arquivo, quero poder recuperar o QBYTearray e carregá -lo novamente em um qpixmap usando a função QPIXMAP :: loadFromData ().

Informe -me se for necessário mais um esclarecimento (estou aberto a abordagens alternativas também, só preciso poder ler e escrever o QPIXMAP em um arquivo! :));

Foi útil?

Solução

Isso parecia muito longo a fazer isso (mas seu comentário explica melhor):

Para escrever:

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

Para ler:

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

QBuffer é ótimo quando você precisa de um QIODevice E quero mantê -lo na memória, mas se você estiver realmente saindo para o disco, é uma etapa do meio desnecessária.

EDITAR:

Para escrever pixmaps e outras coisas, para um único arquivo, eu recomendo que você use Qdatastream.

Para escrever:

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

Então, você pode fazer da mesma forma para ler:

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

Você precisará se certificar de ler os mesmos objetos que os escreveu. Para economizar dores de cabeça futuras de compatibilidade, defina explicitamente a versão Qdatastream.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top