目录
实战演示:
效果展示:
- SQLite 数据库可以存取图片
- 存取的格式为 BLOB 格式
- 需要把图片转为 QByteArray 格式进行存取
1、实战演示
以下实战代码,复制便可以直接运行,希望可以帮助到你。
#include <QtSql>
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 建立数据库
QString dbName("myDatabase.db3");
// 删除 sqlite 文件, 如果它存在于以前的运行
QFile::remove(dbName);
QSqlDatabase db = QSqlDatabase::addDatabase( "QSQLITE" );
db.setDatabaseName(dbName);
db.open();
QSqlQuery query = QSqlQuery( db );
query.exec("CREATE TABLE IF NOT EXISTS imgTable ( filename TEXT, imagedata BLOB )");
// 截图并生成一个图片,将其存放在 QByteArray 中
/*
QScreen *screen = app.primaryScreen();
QPixmap inPixmap = screen->grabWindow( 0 );
QByteArray inByteArray;
QBuffer inBuffer( &inByteArray );
inBuffer.open( QIODevice::WriteOnly );
// 将 inPixmap 写入 PNG 格式的 inByteArray
inPixmap.save( &inBuffer, "PNG" );
*/
// 或则,直接将图片加载到 QByteArray 中
QFile file("C:/Program Files/WPS Office/11.1.0.12763/office6/StartScreenTile/ksolaunch/logo.png");
if (!file.open(QIODevice::ReadOnly))
{
return app.exec();
}
QByteArray inByteArray = file.readAll();
// 插入图片到数据库
query.prepare( "INSERT INTO imgTable (filename, imagedata) VALUES ('logo.png', :imageData)" );
query.bindValue( ":imageData", inByteArray );
if( !query.exec())
{
qDebug() << "Error inserting image into table:\n" << query.lastError();
}
// 从数据库中获取图片
if( !query.exec( "SELECT imagedata from imgTable" ))
{
qDebug() << "Error getting image from table:\n" << query.lastError();
}
query.first();
QByteArray outByteArray = query.value( 0 ).toByteArray();
QPixmap outPixmap = QPixmap();
outPixmap.loadFromData( outByteArray );
db.close();
// 显示图片
QLabel myLabel;
myLabel.setPixmap( outPixmap );
myLabel.show();
return app.exec();
}
2、效果展示