Files
Kallery/imagegallery.cpp

72 lines
2.1 KiB
C++
Raw Normal View History

2025-02-19 15:23:20 +01:00
#include "imagegallery.h"
#include <QPixmap>
2025-02-19 15:44:16 +01:00
#include <QImageReader>
2025-02-19 16:45:33 +01:00
#include <QFileInfo>
ImageGallery::ImageGallery(QWidget *parent) : QWidget(parent), currentColumnCount(1)
2025-02-19 15:23:20 +01:00
{
scrollArea = new QScrollArea(this);
scrollWidget = new QWidget(scrollArea);
2025-02-19 16:45:33 +01:00
gridLayout = new QGridLayout(scrollWidget);
2025-02-19 15:23:20 +01:00
scrollArea->setWidgetResizable(true);
scrollArea->setWidget(scrollWidget);
QVBoxLayout *mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(scrollArea);
setLayout(mainLayout);
}
void ImageGallery::addImage(const QString &imagePath)
{
QLabel *imageLabel = new QLabel(scrollWidget);
QPixmap pixmap(imagePath);
2025-02-19 16:45:33 +01:00
imageLabel->setPixmap(pixmap.scaledToWidth(200, Qt::SmoothTransformation));
2025-02-19 15:23:20 +01:00
imageLabel->setAlignment(Qt::AlignCenter);
2025-02-19 16:45:33 +01:00
int row = gridLayout->count() / currentColumnCount;
int column = gridLayout->count() % currentColumnCount;
gridLayout->addWidget(imageLabel, row, column);
2025-02-19 15:23:20 +01:00
}
2025-02-19 16:45:33 +01:00
void ImageGallery::addImagesFromDirectory(QDir &directory){
2025-02-19 15:44:16 +01:00
QStringList filters;
const QList<QByteArray> supportedFormats = QImageReader::supportedImageFormats();
for(const QByteArray &format : supportedFormats){
filters.append("*." + QString(format).toLower());
}
directory.setNameFilters(filters);
directory.setFilter(QDir::Files | QDir::Readable);
directory.setSorting(QDir::Name);
const QFileInfoList fileList = directory.entryInfoList();
for(const QFileInfo &fileInfo : fileList) {
addImage(fileInfo.absoluteFilePath());
}
}
2025-02-19 16:45:33 +01:00
void ImageGallery::setColumns(int columns)
{
if (columns < 1) {
columns = 1; // Minimalna liczba kolumn to 1
}
currentColumnCount = columns;
// Usuń wszystkie obrazy z layoutu
QLayoutItem *item;
while ((item = gridLayout->takeAt(0))) {
delete item->widget();
delete item;
}
// Dodaj obrazy ponownie z nową liczbą kolumn
QList<QLabel*> labels = scrollWidget->findChildren<QLabel*>();
for (int i = 0; i < labels.size(); ++i) {
int row = i / currentColumnCount;
int column = i % currentColumnCount;
gridLayout->addWidget(labels[i], row, column);
}
}