Ablility to select additional folders
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user