本文介绍了如何在Qt环境中,使用QPixmap加载本地图片,将其转换为QByteArray二进制数据并保存到数据库。同时,展示了如何从数据库中检索图片数据,用QPixmap::loadFromData()加载并显示在QLabel上。 摘要生成于 ,由 DeepSeek-R1 满血版支持,

回答来自Monica ,记录学习过程。

保存图片到数据库

你好!在 Qt 中加载一张本地图片并保存到数据库中,可以使用 QPixmap QByteArray 类来实现。以下是一个简单的示例代码:

*注意:我在使用中发现,图片容量大了存不进去。

// 加载本地图片
QPixmap pixmap("path/to/image.jpg");
// 将图片转换为二进制数据
QByteArray imageData;
QBuffer buffer(&imageData);
buffer.open(QIODevice::WriteOnly);
pixmap.save(&buffer, "JPG"); // 保存为 JPEG 格式
buffer.close();
// 将二进制数据保存到数据库中
QSqlQuery query;
query.prepare("INSERT INTO images (name, data) VALUES (:name, :data)");
query.bindValue(":name", "myimage.jpg");
query.bindValue(":data", imageData);
query.exec();

在这个示例中,首先使用 QPixmap 加载了一张本地图片,并将其保存为 JPEG 格式。然后使用 QByteArrayQBuffer 将图片数据转换为二进制数据,并将其保存到 imageData 变量中。最后,使用 QSqlQuery 将图片名称和二进制数据插入到数据库中。

请注意,这个示例只是演示了如何将一张本地图片保存到数据库中,实际应用中还需要处理错误和异常情况。另外,如果需要从数据库中读取图片数据并显示,可以使用 QPixmap::loadFromData() 方法从二进制数据中加载图片。

从数据库取出图片并显示在qlable对象上。

当从数据库中取出图片数据时,可以使用 QSqlQuery 执行查询语句,并将结果保存到 QByteArray 中。然后,可以使用 QPixmap::loadFromData() 方法从 QByteArray 中加载图片,并将其显示在 QLabel 上。以下是一个简单的示例代码:

// 执行查询语句,获取图片数据
QSqlQuery query;
query.prepare("SELECT data FROM images WHERE name = :name");
query.bindValue(":name", "myimage.jpg");
query.exec();
if (query.next()) {
    QByteArray imageData = query.value(0).toByteArray();
    // 加载图片数据并显示在 QLabel 上
    QPixmap pixmap;
    pixmap.loadFromData(imageData);
    ui->label->setPixmap(pixmap);

在这个示例中,首先使用 QSqlQuery 执行查询语句,获取名称为 myimage.jpg 的图片数据。然后,将结果保存到 QByteArray 变量 imageData 中。接着,使用 QPixmap::loadFromData() 方法从 imageData 中加载图片,并将其显示在名为 labelQLabel 控件上。

请注意,这个示例只是演示了如何从数据库中获取图片数据并显示在 QLabel 上,实际应用中还需要处理错误和异常情况。另外,如果需要在界面中显示多张图片,可以使用 QListWidgetQTableView 等控件来实现。

在这里交代一下实现该功能的前提情况:云数据库中存储的图片不是blob类型的,而是经过base64转码后的text数据类型,在这里还涉及了base64的解码。 mainwindow.h: public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); QSqlQuery query; QByteArray img_text[4]; //未解码的QByteArray QB...
//SplashScreen程序动画 QPixmap image(qApp->applicationDirPath()+"/timg.jpg"); QSplashScreen SplashScreen; SplashScreen.setPixmap(image); SplashScreen.show(); //加载图片 那你可以这么存储它: xxx.save(path);//path可以是"xxxxxxxx"(即文件夹路径,如"C:/Users/Administrator/Documents"),也可以是几个字符串相加或单独一个字符串 记住Qt里只能用"/"不能用"\" 对于读取图片: 假设你定义了个叫xxx的QImage
QFileDialog fileDlg; QString imgFile = fileDlg.getOpenFileName(this, QString::fromLocal8Bit("加载图片"), "D:\\", QString::fromLocal8Bit("图片(*jpg *png *bmp *dfx)")); QFileInfo fileInf(imgFile); if (!fileInf.exists()) QMessageBox::warning(this, QString::
首先需要一个按钮,按了这个按钮后跳转到读取文件,这里用connect实现。此外需要一个Qlabel按钮接收要显示的图片,下面是槽函数的写法: void MainForm::onbtnInteracOpen_clicked() { qDebug() << "---------------------------点击open------------------------------"; //第三个参数是默认打开图片路径 QString fileNa