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