-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSqlImageTableModel.cpp
More file actions
46 lines (35 loc) · 1.29 KB
/
SqlImageTableModel.cpp
File metadata and controls
46 lines (35 loc) · 1.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include "SqlImageTableModel.h"
#include <QBuffer>
const QPixmap& SqlImageTableModel::getCachedImage(const QString& hash, QByteArray& origin) const
{
auto hashStr = hash.toStdString();
auto it = m_imagesCache.find(hashStr);
if(it != m_imagesCache.end())
return it->second;
QBuffer buffer(&origin);
buffer.open(QIODevice::ReadOnly);
QImage image;
image.load(&buffer, "PNG");
return m_imagesCache[hashStr] = QPixmap::fromImage(image.scaled(240,240));
}
SqlImageTableModel::SqlImageTableModel()
{
}
int SqlImageTableModel::columnCount(const QModelIndex& idx) const
{
return QSqlTableModel::columnCount(idx);
}
QVariant SqlImageTableModel::data(const QModelIndex& idx, int role) const
{
if(role == Qt::DisplayRole) {
auto item = QSqlTableModel::data(idx.siblingAtColumn(2), role);
return QString::number(item.toDouble());
}
if(role == Qt::DecorationRole) {
auto itemHash = QSqlTableModel::data(idx.siblingAtColumn(1), Qt::DisplayRole);
auto image = QSqlTableModel::data(idx.siblingAtColumn(3), Qt::DisplayRole);
auto array = image.toByteArray();
return QVariant(getCachedImage(itemHash.toString(), array));
}
return QSqlTableModel::data(idx, role);
}