diff --git a/imagegallery.cpp b/imagegallery.cpp index 4aead1e..e21a466 100644 --- a/imagegallery.cpp +++ b/imagegallery.cpp @@ -1,12 +1,12 @@ #include "imagegallery.h" #include #include - -ImageGallery::ImageGallery(QWidget *parent) : QWidget(parent) +#include +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 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 labels = scrollWidget->findChildren(); + for (int i = 0; i < labels.size(); ++i) { + int row = i / currentColumnCount; + int column = i % currentColumnCount; + gridLayout->addWidget(labels[i], row, column); + } +} diff --git a/imagegallery.h b/imagegallery.h index 464b6b3..0a48e0c 100644 --- a/imagegallery.h +++ b/imagegallery.h @@ -3,11 +3,12 @@ #include #include -#include +#include #include #include #include - +#include +#include 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 imageLabels; + QGridLayout *gridLayout; + int currentColumnCount; }; #endif // IMAGEGALLERY_H diff --git a/mainwindow.cpp b/mainwindow.cpp index 5ce9182..71f0b61 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1,13 +1,58 @@ #include "mainwindow.h" #include +#include +#include +#include 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(width() * 0.2), static_cast(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() diff --git a/mainwindow.h b/mainwindow.h index 20efb10..6a6935e 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -1,4 +1,5 @@ #include +#include #include "imagegallery.h" class MainWindow : public QMainWindow @@ -10,5 +11,7 @@ public: ~MainWindow(); private: + QSplitter *splitter; + QWidget *leftMenu; ImageGallery *imageGallery; };