本文介绍了如何在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 格式。然后使用 QByteArray
和 QBuffer
将图片数据转换为二进制数据,并将其保存到 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
中加载图片,并将其显示在名为 label
的 QLabel
控件上。
请注意,这个示例只是演示了如何从数据库中获取图片数据并显示在 QLabel
上,实际应用中还需要处理错误和异常情况。另外,如果需要在界面中显示多张图片,可以使用 QListWidget
或 QTableView
等控件来实现。
在这里交代一下实现该功能的前提情况:云数据库中存储的图片不是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