Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.
How to Store and Retrieve Image on SQLite
Jump to navigation
Jump to search
Images (or any other binary data, from files or otherwise) can be stored in a database. One way to do it is converting the data into a QByteArray, and insert it into the database as a Binary Large OBject (BLOB).
Below is a full example of such a workflow, including reading the image back from the database and displaying it:
#include <QtSql>
#include <QtWidgets>
int main( int argc, char *argv[] )
{
QApplication app( argc, argv );
// Set up database
QString dbName( "myDatabase.db3" );
QFile::remove( dbName ); // delete sqlite file if it exists from a previous run
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 )" );
// Generate an image (in this case a screenshot) and store it in a QByteArray
QScreen *screen = app.primaryScreen();
QPixmap inPixmap = screen->grabWindow( 0 );
QByteArray inByteArray;
QBuffer inBuffer( &inByteArray );
inBuffer.open( QIODevice::WriteOnly );
inPixmap.save( &inBuffer, "PNG" ); // write inPixmap into inByteArray in PNG format
// Alternatively, load an image file directly into a QByteArray
// QFile file("screenshot.png");
// if (!file.open(QIODevice::ReadOnly)) return;
// QByteArray inByteArray = file.readAll();
// Insert image bytes into the database
// Note: make sure to wrap the :placeholder in parenthesis
query.prepare( "INSERT INTO imgTable (filename, imagedata) VALUES ('screenshot.png', :imageData)" );
query.bindValue( ":imageData", inByteArray );
if( !query.exec() )
qDebug() << "Error inserting image into table:\n" << query.lastError();
// Get image data back from database
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();
// Display image
QLabel myLabel;
myLabel.setPixmap( outPixmap );
myLabel.show();
return app.exec();
}