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 "imagegallery.h"
#include <QPixmap> #include <QPixmap>
#include <QImageReader> #include <QImageReader>
#include <QFileInfo>
ImageGallery::ImageGallery(QWidget *parent) : QWidget(parent) ImageGallery::ImageGallery(QWidget *parent) : QWidget(parent), currentColumnCount(1)
{ {
scrollArea = new QScrollArea(this); scrollArea = new QScrollArea(this);
scrollWidget = new QWidget(scrollArea); scrollWidget = new QWidget(scrollArea);
scrollLayout = new QVBoxLayout(scrollWidget); gridLayout = new QGridLayout(scrollWidget);
scrollArea->setWidgetResizable(true); scrollArea->setWidgetResizable(true);
scrollArea->setWidget(scrollWidget); scrollArea->setWidget(scrollWidget);
@@ -20,14 +20,16 @@ void ImageGallery::addImage(const QString &imagePath)
{ {
QLabel *imageLabel = new QLabel(scrollWidget); QLabel *imageLabel = new QLabel(scrollWidget);
QPixmap pixmap(imagePath); QPixmap pixmap(imagePath);
imageLabel->setPixmap(pixmap.scaledToWidth(400, Qt::SmoothTransformation)); imageLabel->setPixmap(pixmap.scaledToWidth(200, Qt::SmoothTransformation));
imageLabel->setAlignment(Qt::AlignCenter); 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){ void ImageGallery::addImagesFromDirectory(QDir &directory){
QDir directory(directoryPath);
QStringList filters; QStringList filters;
const QList<QByteArray> supportedFormats = QImageReader::supportedImageFormats(); const QList<QByteArray> supportedFormats = QImageReader::supportedImageFormats();
@@ -44,3 +46,26 @@ void ImageGallery::addImagesFromDirectory(const QString &directoryPath){
addImage(fileInfo.absoluteFilePath()); 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 <QWidget>
#include <QScrollArea> #include <QScrollArea>
#include <QVBoxLayout> #include <QGridLayout>
#include <QLabel> #include <QLabel>
#include <QList> #include <QList>
#include <QDir> #include <QDir>
#include <QGridLayout>
#include <QScrollArea>
class ImageGallery : public QWidget class ImageGallery : public QWidget
{ {
Q_OBJECT Q_OBJECT
@@ -15,13 +16,15 @@ class ImageGallery : public QWidget
public: public:
explicit ImageGallery(QWidget *parent = nullptr); explicit ImageGallery(QWidget *parent = nullptr);
void addImage(const QString &imagePath); void addImage(const QString &imagePath);
void addImagesFromDirectory(const QString &directoryPath); void addImagesFromDirectory(QDir &directory);
void extracted(QLayoutItem *&item);
void setColumns(int columns);
private: private:
QScrollArea *scrollArea; QScrollArea *scrollArea;
QWidget *scrollWidget; QWidget *scrollWidget;
QVBoxLayout *scrollLayout; QGridLayout *gridLayout;
QList<QLabel*> imageLabels; int currentColumnCount;
}; };
#endif // IMAGEGALLERY_H #endif // IMAGEGALLERY_H

View File

@@ -1,13 +1,58 @@
#include "mainwindow.h" #include "mainwindow.h"
#include <QApplication> #include <QApplication>
#include <QFileDialog>
#include <QPushButton>
#include <QSlider>
MainWindow::MainWindow(QWidget *parent) MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent) : QMainWindow(parent)
{ {
imageGallery = new ImageGallery(this); // Główny kontener podzielony na dwie części
setCentralWidget(imageGallery); 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"); setWindowTitle("Kallery Image Gallery");
imageGallery->addImagesFromDirectory("/home/krzys/Obrazy");
resize(800, 600); 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() MainWindow::~MainWindow()

View File

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