| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
1 |
#include "imagemodel.h" |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
2 |
|
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
3 |
#include <QDir> |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
4 |
#include <QImageReader> |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
5 |
#include <QFileInfo> |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
6 |
|
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
7 |
ImageModel::ImageModel(QObject *parent) |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
8 |
: QAbstractListModel(parent) |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
9 |
{ |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
10 |
} |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
11 |
|
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
12 |
void ImageModel::setDirectory(const QString &path) |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
13 |
{ |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
14 |
beginResetModel(); |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
15 |
m_items.clear(); |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
16 |
|
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
17 |
QDir dir(path); |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
18 |
QStringList filters; |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
19 |
|
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
20 |
const auto formats = QImageReader::supportedImageFormats(); |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
21 |
for (const QByteArray &fmt : formats) |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
22 |
filters << "*." + fmt; |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
23 |
|
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
24 |
dir.setNameFilters(filters); |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
25 |
dir.setFilter(QDir::Files); |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
26 |
|
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
27 |
for (const QFileInfo &file : dir.entryInfoList()) |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
28 |
{ |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
29 |
QImageReader reader(file.absoluteFilePath()); |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
30 |
reader.setAutoTransform(true); |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
31 |
|
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
32 |
QImage image = reader.read(); |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
33 |
QPixmap thumb = QPixmap::fromImage( |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
34 |
image.scaled(128, 128, Qt::KeepAspectRatio, |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
35 |
Qt::SmoothTransformation)); |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
36 |
|
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
37 |
m_items.append({file.absoluteFilePath(), thumb}); |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
38 |
} |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
39 |
|
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
40 |
endResetModel(); |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
41 |
} |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
42 |
|
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
43 |
QString ImageModel::filePath(const QModelIndex &index) const |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
44 |
{ |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
45 |
if (!index.isValid()) |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
46 |
return {}; |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
47 |
|
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
48 |
return m_items[index.row()].path; |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
49 |
} |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
50 |
|
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
51 |
int ImageModel::rowCount(const QModelIndex &) const |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
52 |
{ |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
53 |
return m_items.size(); |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
54 |
} |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
55 |
|
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
56 |
QVariant ImageModel::data(const QModelIndex &index, int role) const |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
57 |
{ |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
58 |
if (!index.isValid()) |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
59 |
return {}; |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
60 |
|
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
61 |
const Item &item = m_items[index.row()]; |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
62 |
|
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
63 |
if (role == Qt::DecorationRole) |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
64 |
return item.thumbnail; |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
65 |
|
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
66 |
if (role == Qt::DisplayRole) |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
67 |
return QFileInfo(item.path).fileName(); |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
68 |
|
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
69 |
return {}; |
| 032aa1e1 |
Poul Sander |
2026-02-19 18:55 |
70 |
} |
|
|
1970-01-01 00:00 |
71 |
|