image viewer

This commit is contained in:
2019-04-03 23:01:44 +02:00
parent a643810119
commit d6268527fa
6 changed files with 145 additions and 91 deletions
+35 -29
View File
@@ -1,60 +1,66 @@
#include "cimageviewer.h"
#include "ui_cimageviewer.h"
#include "cimage.h"
#include <QKeyEvent>
#include <QFile>
#include <QDebug>
cImageViewer::cImageViewer(QWidget *parent) :
QDialog(parent),
ui(new Ui::cImageViewer)
ui(new Ui::cImageViewer),
m_lpImage(nullptr)
{
ui->setupUi(this);
ui->m_lpImage->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
// connect(ui->m_lpImage, &cLabel::imageNext, this, &cImageViewer::onImageNext);
// connect(ui->m_lpImage, &cLabel::imagePrev, this, &cImageViewer::onImagePrev);
// connect(ui->m_lpImage, &cLabel::imageFirst, this, &cImageViewer::onImageFirst);
// connect(ui->m_lpImage, &cLabel::imageLast, this, &cImageViewer::onImageLast);
connect(ui->m_lpImage, &cLabel::imageNext, this, &cImageViewer::onImageNext);
connect(ui->m_lpImage, &cLabel::imagePrev, this, &cImageViewer::onImagePrev);
connect(ui->m_lpImage, &cLabel::imageFirst, this, &cImageViewer::onImageFirst);
connect(ui->m_lpImage, &cLabel::imageLast, this, &cImageViewer::onImageLast);
}
cImageViewer::~cImageViewer()
{
if(m_lpImage)
delete m_lpImage;
delete ui;
}
void cImageViewer::setImage(cImage* lpImage)
void cImageViewer::setPicture(QString szNumber, QString szRootPath, cPicture* lpPicture)
{
ui->m_lpImage->setImage(lpImage);
QApplication::setOverrideCursor(Qt::WaitCursor);
setWindowFlag(Qt::Window);
showFullScreen();
if(m_lpImage)
delete m_lpImage;
ui->m_lpImage->setFocus();
}
QFile file(szRootPath + "/" + lpPicture->filePath() + "/" + lpPicture->fileName());
void cImageViewer::keyPressEvent(QKeyEvent* e)
{
switch(e->key())
if(!file.exists())
return;
m_lpImage = new cImage(file.fileName());
QApplication::restoreOverrideCursor();
if(m_lpImage->isNull())
{
case Qt::Key_Left:
emit imagePrev();
break;
case Qt::Key_Right:
emit imageNext();
break;
case Qt::Key_Home:
emit imageFirst();
break;
case Qt::Key_End:
emit imageLast();
break;
default:
break;
delete m_lpImage;
m_lpImage = nullptr;
return;
}
QDialog::keyPressEvent(e);
ui->m_lpImage->setImage(m_lpImage);
ui->m_lpFileName->setText(szNumber + " - " + lpPicture->filePath() + "/" + lpPicture->fileName());
setWindowFlag(Qt::Window);
showMaximized();
ui->m_lpImage->setFocus();
}
void cImageViewer::onImageNext()
+3 -2
View File
@@ -2,6 +2,7 @@
#define CIMAGEVIEWER_H
#include "cpicture.h"
#include "cimage.h"
#include <QDialog>
@@ -19,12 +20,12 @@ public:
explicit cImageViewer(QWidget *parent = nullptr);
~cImageViewer();
void setImage(cImage* lpImage);
void setPicture(QString szNumber, QString szRootPath, cPicture* lpPicture);
private:
Ui::cImageViewer* ui;
cImage* m_lpImage;
protected:
void keyPressEvent(QKeyEvent* e);
private slots:
/*!
+46 -32
View File
@@ -15,38 +15,52 @@
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QScrollArea" name="scrollArea">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>380</width>
<height>280</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="cLabel" name="m_lpImage">
<property name="font">
<font>
<pointsize>20</pointsize>
</font>
</property>
<property name="text">
<string>loading...</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QScrollArea" name="scrollArea">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>378</width>
<height>259</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="cLabel" name="m_lpImage">
<property name="font">
<font>
<pointsize>20</pointsize>
</font>
</property>
<property name="text">
<string>loading...</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item>
<widget class="QLabel" name="m_lpFileName">
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
+3
View File
@@ -3,6 +3,8 @@
#include <QResizeEvent>
#include <QKeyEvent>
#include <QDebug>
cLabel::cLabel(QWidget *parent, Qt::WindowFlags f) :
QLabel(parent, f)
@@ -18,6 +20,7 @@ cLabel::cLabel(const QString &text, QWidget *parent, Qt::WindowFlags f) :
void cLabel::setImage(cImage* lpImage)
{
m_lpImage = lpImage;
setPixmap(QPixmap::fromImage(m_lpImage->scaled(width(), height(), Qt::AspectRatioMode::KeepAspectRatio, Qt::TransformationMode::SmoothTransformation)));
}
void cLabel::resizeEvent(QResizeEvent* e)
+46 -28
View File
@@ -14,7 +14,6 @@
#include "ccombopicker.h"
#include "cimage.h"
#include "cimageviewer.h"
#include "cstyleddelegate.h"
@@ -49,7 +48,8 @@ cMainWindow::cMainWindow(cSplashScreen* lpSplashScreen, QWidget *parent) :
m_bLoading(false),
m_lpSplashScreen(lpSplashScreen),
m_lpFileMenu(nullptr),
m_lpFileToolBar(nullptr)
m_lpFileToolBar(nullptr),
m_lpImageViewer(nullptr)
{
initUI();
createActions();
@@ -65,6 +65,9 @@ cMainWindow::cMainWindow(cSplashScreen* lpSplashScreen, QWidget *parent) :
cMainWindow::~cMainWindow()
{
if(m_lpImageViewer)
delete m_lpImageViewer;
if(m_lpFilterPanel)
delete m_lpFilterPanel;
@@ -461,33 +464,26 @@ void cMainWindow::onThumbnailDoubleClicked(const QModelIndex& index)
if(!index.isValid())
return;
cPicture* lpPicture = m_lpThumbnailSortFilterProxyModel->data(index, Qt::UserRole+1).value<cPicture*>();
QFile file(m_pictureLibrary.rootPath() + "/" + lpPicture->filePath() + "/" + lpPicture->fileName());
m_imageViewerIndex = index;
if(!m_lpImageViewer)
m_lpImageViewer = new cImageViewer(this);
if(!file.exists())
return;
connect(m_lpImageViewer, &cImageViewer::imageNext, this, &cMainWindow::onImageNext);
connect(m_lpImageViewer, &cImageViewer::imagePrev, this, &cMainWindow::onImagePrev);
connect(m_lpImageViewer, &cImageViewer::imageFirst, this, &cMainWindow::onImageFirst);
connect(m_lpImageViewer, &cImageViewer::imageLast, this, &cMainWindow::onImageLast);
QApplication::setOverrideCursor(Qt::WaitCursor);
cImageViewer imageViewer(this);
viewImage();
cImage image(file.fileName());
QApplication::restoreOverrideCursor();
m_lpImageViewer->exec();
if(image.isNull())
return;
disconnect(m_lpImageViewer, &cImageViewer::imageNext, this, &cMainWindow::onImageNext);
disconnect(m_lpImageViewer, &cImageViewer::imagePrev, this, &cMainWindow::onImagePrev);
disconnect(m_lpImageViewer, &cImageViewer::imageFirst, this, &cMainWindow::onImageFirst);
disconnect(m_lpImageViewer, &cImageViewer::imageLast, this, &cMainWindow::onImageLast);
connect(&imageViewer, &cImageViewer::imageNext, this, &cMainWindow::onImageNext);
connect(&imageViewer, &cImageViewer::imagePrev, this, &cMainWindow::onImagePrev);
connect(&imageViewer, &cImageViewer::imageFirst, this, &cMainWindow::onImageFirst);
connect(&imageViewer, &cImageViewer::imageLast, this, &cMainWindow::onImageLast);
imageViewer.setImage(&image);
imageViewer.exec();
disconnect(&imageViewer, &cImageViewer::imageNext, this, &cMainWindow::onImageNext);
disconnect(&imageViewer, &cImageViewer::imagePrev, this, &cMainWindow::onImagePrev);
disconnect(&imageViewer, &cImageViewer::imageFirst, this, &cMainWindow::onImageFirst);
disconnect(&imageViewer, &cImageViewer::imageLast, this, &cMainWindow::onImageLast);
delete m_lpImageViewer;
m_lpImageViewer = nullptr;
}
void cMainWindow::onFolderSelected(const QItemSelection& /*selection*/, const QItemSelection& /*previous*/)
@@ -993,22 +989,44 @@ void cMainWindow::onFilterTagChanged(QList<qint32> idList, bool bAnd)
showCount();
}
void cMainWindow::viewImage()
{
if(!m_lpImageViewer)
return;
cPicture* lpPicture = m_lpThumbnailSortFilterProxyModel->data(m_imageViewerIndex, Qt::UserRole+1).value<cPicture*>();
m_lpImageViewer->setPicture(QString("%1/%2").arg(m_imageViewerIndex.row()+1).arg(m_lpThumbnailSortFilterProxyModel->rowCount()), m_pictureLibrary.rootPath(), lpPicture);
}
void cMainWindow::onImageNext()
{
qDebug() << "next image";
m_imageViewerIndex = m_lpThumbnailSortFilterProxyModel->index(m_imageViewerIndex.row()+1, 0);
if(!m_imageViewerIndex.isValid())
m_imageViewerIndex = m_lpThumbnailSortFilterProxyModel->index(0, 0);
viewImage();
}
void cMainWindow::onImagePrev()
{
qDebug() << "prev image";
m_imageViewerIndex = m_lpThumbnailSortFilterProxyModel->index(m_imageViewerIndex.row()-1, 0);
if(!m_imageViewerIndex.isValid())
m_imageViewerIndex = m_lpThumbnailSortFilterProxyModel->index(m_lpThumbnailViewModel->rowCount()-1, 0);
viewImage();
}
void cMainWindow::onImageLast()
{
qDebug() << "last image";
m_imageViewerIndex = m_lpThumbnailSortFilterProxyModel->index(m_lpThumbnailViewModel->rowCount()-1, 0);
viewImage();
}
void cMainWindow::onImageFirst()
{
qDebug() << "first image";
m_imageViewerIndex = m_lpThumbnailSortFilterProxyModel->index(0, 0);
viewImage();
}
+12
View File
@@ -21,6 +21,8 @@
#include "cfilterpanel.h"
#include "cimageviewer.h"
#include <QMainWindow>
#include <QCloseEvent>
@@ -106,6 +108,9 @@ private:
QAction* m_lpSetHDRAction; /*!< TODO: describe */
QAction* m_lpUnsetHDRAction; /*!< TODO: describe */
cImageViewer* m_lpImageViewer; /*!< TODO: describe */
QModelIndex m_imageViewerIndex; /*!< TODO: describe */
/*!
\brief
@@ -179,6 +184,13 @@ private:
\fn showCount
*/
void showCount();
/*!
\brief
\fn viewImage
*/
void viewImage();
protected:
/*!
\brief