diff --git a/src/QImageViewer.cpp b/src/QImageViewer.cpp index 91f7cb9..b381508 100644 --- a/src/QImageViewer.cpp +++ b/src/QImageViewer.cpp @@ -1,7 +1,9 @@ #include "QImageViewer.h" #include #include +#include #include +#include #include #include #include @@ -53,6 +55,33 @@ bool QImageViewer::loadFile (const QString& file) { return true; } +bool QImageViewer::saveFile (const QString& file) { + + if (file.isEmpty() == true) { + return false; + } + + qDebug() << file; + qDebug() << _image; + + QImageWriter writer(file); + + bool f = writer.write(_image); + + if (f == false) { + qDebug() << writer.errorString(); + } + + return f; +} + +bool QImageViewer::saveFileDialog (const QString& file) { + + QString fileName = QFileDialog::getSaveFileName(this, tr("Save Image File"), file, tr("Image Files (*.png *.jpg *.bmp)"), nullptr, QFileDialog::DontUseNativeDialog); + + return saveFile(fileName); +} + void QImageViewer::setImage (const QImage& image) { //qDebug() << image; @@ -84,7 +113,11 @@ void QImageViewer::zoom (double factor) { _zoomFactor = factor; +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) _imageLabel->resize(_zoomFactor * _imageLabel->pixmap(Qt::ReturnByValue).size()); +#else + _imageLabel->resize(_zoomFactor * _imageLabel->pixmap()->size()); +#endif } void QImageViewer::zoomIn () { @@ -104,10 +137,9 @@ void QImageViewer::zoomReset () { void QImageViewer::print () { - Q_ASSERT(_imageLabel->pixmap(Qt::ReturnByValue).isNull() == false); - QPrintDialog dialog(&_printer, this); +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) if (dialog.exec()) { QPainter painter(&_printer); QRect rect = painter.viewport(); @@ -117,6 +149,17 @@ void QImageViewer::print () { painter.setWindow(_imageLabel->pixmap(Qt::ReturnByValue).rect()); painter.drawPixmap(0, 0, _imageLabel->pixmap(Qt::ReturnByValue)); } +#else + if (dialog.exec()) { + QPainter painter(&_printer); + QRect rect = painter.viewport(); + QSize size = _imageLabel->pixmap()->size(); + size.scale(rect.size(), Qt::KeepAspectRatio); + painter.setViewport(rect.x(), rect.y(), size.width(), size.height()); + painter.setWindow(_imageLabel->pixmap()->rect()); + painter.drawPixmap(0, 0, *_imageLabel->pixmap()); + } +#endif } void QImageViewer::keyPressEvent (QKeyEvent* event) { @@ -138,6 +181,11 @@ void QImageViewer::keyPressEvent (QKeyEvent* event) { print(); } break; + case Qt::Key_S: + if (event->modifiers() == Qt::ControlModifier) { + saveFileDialog(""); + } + break; default: QWidget::keyPressEvent(event); break; diff --git a/src/QImageViewer.h b/src/QImageViewer.h index 04bb411..07a95d7 100644 --- a/src/QImageViewer.h +++ b/src/QImageViewer.h @@ -16,6 +16,8 @@ class QImageViewer : public QWidget { ~QImageViewer (); bool loadFile (const QString& file); + bool saveFile (const QString& file); + bool saveFileDialog (const QString& file); void setImage (const QImage& image); const QImage& image () const; void setText (const QString& text); diff --git a/src/SeerImageVisualizerWidget.cpp b/src/SeerImageVisualizerWidget.cpp index c06cb67..f7442dd 100644 --- a/src/SeerImageVisualizerWidget.cpp +++ b/src/SeerImageVisualizerWidget.cpp @@ -319,7 +319,7 @@ void SeerImageVisualizerWidget::handlePrintButton () { void SeerImageVisualizerWidget::handleSaveButton () { - QMessageBox::warning(this, "Note.", "Not implmented yet."); + imageViewer->saveFileDialog(variableNameLineEdit->text() + ".png"); } void SeerImageVisualizerWidget::handleCreateImage (const QByteArray& array) { diff --git a/src/SeerLogWidget.cpp b/src/SeerLogWidget.cpp index 7f238f3..f6ef3c0 100644 --- a/src/SeerLogWidget.cpp +++ b/src/SeerLogWidget.cpp @@ -97,10 +97,6 @@ void SeerLogWidget::handlePrintButton () { void SeerLogWidget::handleSaveButton () { - /* - QString fname = QFileDialog::getSaveFileName(this, "Seer log file", "./", "Logs (*.log);;Text files (*.txt);;All files (*.*)"); - */ - QFileDialog dialog(this, "Seer log file", "./", "Logs (*.log);;Text files (*.txt);;All files (*.*)"); dialog.setOptions(QFileDialog::DontUseNativeDialog); dialog.setAcceptMode(QFileDialog::AcceptSave);