23

我在读取和写入 QByteArray 数据到文件时遇到问题。

我的目标是将 QPixmap 数据保存到 QByteArray 中,并将 QByteArray 保存到文件中(能够从文件中读取此 QByteArray 并保存到 QPixmap 中)。我想使用 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

将缓冲区写入文件后,我希望能够检索 QByteArray 并使用 QPixmap::loadFromData() 函数将其加载回 QPixmap。

请让我知道是否需要进一步澄清(我也愿意接受替代方法,我只需要能够读取 QPixmap 并将其写入文件!:));

4

1 回答 1

48

这似乎是一个很长的路要走(但你的评论更好地解释了):

对于写作:

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

阅读:

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

QBuffer当您需要 aQIODevice并希望将其保存在内存中时非常好,但如果您实际上要访问磁盘,那么这是不必要的中间步骤。

编辑:

要将像素图和其他内容写入单个文件,我建议您使用QDataStream

对于写作:

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

然后,你可以做类似的阅读:

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

您需要确保读取的对象与写出的对象相同。为了避免将来遇到兼容性问题,请明确设置 QDataStream 版本。

于 2010-03-12T06:37:03.053 回答