Ablility to select additional folders

This commit is contained in:
2025-02-19 16:45:33 +01:00
parent 5c41adf907
commit d98a61602c
4 changed files with 92 additions and 16 deletions

View File

@@ -1,12 +1,12 @@
#include "imagegallery.h"
#include <QPixmap>
#include <QImageReader>
ImageGallery::ImageGallery(QWidget *parent) : QWidget(parent)
#include <QFileInfo>
ImageGallery::ImageGallery(QWidget *parent) : QWidget(parent), currentColumnCount(1)
{
scrollArea = new QScrollArea(this);
scrollWidget = new QWidget(scrollArea);
scrollLayout = new QVBoxLayout(scrollWidget);
gridLayout = new QGridLayout(scrollWidget);
scrollArea->setWidgetResizable(true);
scrollArea->setWidget(scrollWidget);
@@ -20,14 +20,16 @@ void ImageGallery::addImage(const QString &imagePath)
{
QLabel *imageLabel = new QLabel(scrollWidget);
QPixmap pixmap(imagePath);
imageLabel->setPixmap(pixmap.scaledToWidth(400, Qt::SmoothTransformation));
imageLabel->setPixmap(pixmap.scaledToWidth(200, Qt::SmoothTransformation));
imageLabel->setAlignment(Qt::AlignCenter);
scrollLayout->addWidget(imageLabel);
imageLabels.append(imageLabel);
int row = gridLayout->count() / currentColumnCount;
int column = gridLayout->count() % currentColumnCount;
gridLayout->addWidget(imageLabel, row, column);
}
void ImageGallery::addImagesFromDirectory(const QString &directoryPath){
QDir directory(directoryPath);
void ImageGallery::addImagesFromDirectory(QDir &directory){
QStringList filters;
const QList<QByteArray> supportedFormats = QImageReader::supportedImageFormats();
@@ -44,3 +46,26 @@ void ImageGallery::addImagesFromDirectory(const QString &directoryPath){
addImage(fileInfo.absoluteFilePath());
}
}
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);
}
}

View File

@@ -3,11 +3,12 @@
#include <QWidget>
#include <QScrollArea>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QLabel>
#include <QList>
#include <QDir>
#include <QGridLayout>
#include <QScrollArea>
class ImageGallery : public QWidget
{
Q_OBJECT
@@ -15,13 +16,15 @@ class ImageGallery : public QWidget
public:
explicit ImageGallery(QWidget *parent = nullptr);
void addImage(const QString &imagePath);
void addImagesFromDirectory(const QString &directoryPath);
void addImagesFromDirectory(QDir &directory);
void extracted(QLayoutItem *&item);
void setColumns(int columns);
private:
QScrollArea *scrollArea;
QWidget *scrollWidget;
QVBoxLayout *scrollLayout;
QList<QLabel*> imageLabels;
QGridLayout *gridLayout;
int currentColumnCount;
};
#endif // IMAGEGALLERY_H

View File

@@ -1,13 +1,58 @@
#include "mainwindow.h"
#include <QApplication>
#include <QFileDialog>
#include <QPushButton>
#include <QSlider>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
imageGallery = new ImageGallery(this);
setCentralWidget(imageGallery);
// Główny kontener podzielony na dwie części
splitter = new QSplitter(this);
leftMenu = new QWidget(splitter);
QVBoxLayout *menuLayout = new QVBoxLayout(leftMenu);
QPushButton *openButton = new QPushButton("Otwórz katalog", leftMenu);
menuLayout->addWidget(openButton);
menuLayout->addStretch();
QLabel *sliderLabel = new QLabel("Liczba kolumn: 3", leftMenu); // Etykieta pokazująca wartość suwaka
QSlider *columnsSlider = new QSlider(leftMenu);
menuLayout->addWidget(columnsSlider);
columnsSlider->setMinimum(1); // Minimalna liczba kolumn
columnsSlider->setMaximum(10); // Maksymalna liczba kolumn
columnsSlider->setValue(5);
imageGallery = new ImageGallery(splitter); //ustawianie galerii
//ustawienie wsyzstkiego razem w jednym miejscu
splitter->addWidget(leftMenu);
splitter->addWidget(imageGallery);
splitter->setSizes({static_cast<int>(width() * 0.2), static_cast<int>(width() * 0.8)});
setCentralWidget(splitter);
setWindowTitle("Kallery Image Gallery");
imageGallery->addImagesFromDirectory("/home/krzys/Obrazy");
resize(800, 600);
connect(openButton, &QPushButton::clicked, this, [this]() {
QDir sciezka = QFileDialog::getExistingDirectory(this, "Wybierz katalog", QDir::homePath());
if (!sciezka.isEmpty()) {
imageGallery->addImagesFromDirectory(sciezka);
}
});
connect(columnsSlider, &QSlider::valueChanged, this, [this, sliderLabel](int value){
sliderLabel->setText("Liczba kolumn: " + QString::number(value));
imageGallery->setColumns(value);
});
imageGallery->setColumns(3);
QDir sciezka = QFileDialog::getExistingDirectory(this,"Select folder", QDir::homePath()); //dodaje okno dialogowe do wyboru
imageGallery->addImagesFromDirectory(sciezka);
}
MainWindow::~MainWindow()

View File

@@ -1,4 +1,5 @@
#include <QMainWindow>
#include <QSplitter>
#include "imagegallery.h"
class MainWindow : public QMainWindow
@@ -10,5 +11,7 @@ public:
~MainWindow();
private:
QSplitter *splitter;
QWidget *leftMenu;
ImageGallery *imageGallery;
};