使用Qt保存和检索图像

3
实际上我找到了一些与我的问题有关的有用文章,但并不完全符合,我将详细说明我的问题。
我有一张表格,其中有两列,id是整数,pix是二进制大型对象(BLOB)。
我有一个带有标签和两个按钮“打开”和“保存”的表单。
我试图将图片打开到标签中,然后当我点击保存时,我必须将其保存到数据库表中。
另外,如果我添加导航按钮(下一个和上一个),我还想再次检索图像并显示在标签中。
请问能提供任何帮助吗?
1个回答

2
这是一个将QImage保存到数据库的简短示例:
// Converting image to byte array:
QByteArray bytes;
{
    QBuffer buffer (&bytes);
    buffer.open (QBuffer::WriteOnly);
    image.save (&buffer, "PNG");
}

// Writing data into the database:
QString id_string = id == -1 ? "NULL" : QString::number (id);
QSqlQuery query ("REPLACE INTO images "
                 "(id, image) VALUES (:id, :image)");
query.bindValue (":id", id_string);
query.bindValue (":image", QString (bytes.toBase64()));
if (!query.exec()) throw some_exception;

基本上,你需要将图像转换为字节数组,然后只需使用SQL查询将其保存在数据库中。请注意,我正在处理我的程序中的此问题,因此上面的代码可能不完美。希望这可以帮助到你。


在我看来,如果图像列是BLOB类型的,就没有必要将其转换为base64。 - hmuelner
1
首先,我想感谢您,这看起来是完美的代码。但我不是一个专业的程序员,所以我需要更多的帮助。请耐心等待。让我们将其分为几个部分,在第一个块中, 我包括了 QByteArray 和 QBuffer 然后有一个问题,为什么我们需要两个大括号?我的意思是,我们可以写成QbyteArray bytes; QBuffer buffer(&bytes); buffer.open(QBuffer::WriteOnly)最后,图片代表什么?再次感谢您。 - user289175
@Septagram 我想从数据库中检索图像并显示它。这该怎么做? - Niklas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接