#include "mainwindow.h" #include "ui_mainwindow.h" #include #include #include MainWindow::MainWindow(const QStringList &filePaths, QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); connect(ui->actionQuit, &QAction::triggered, qApp, &QApplication::quit); if (!filePaths.isEmpty()) { current.load(filePaths.first()); setWindowTitle(title_format.arg(filePaths.first())); fit(); } connect(ui->ori_toolButton, &QToolButton::clicked, [this]() { scale(1.0); }); connect(ui->fit_toolButton, &QToolButton::clicked, [this]() { fit(); }); connect(ui->scale_slider, &QSlider::sliderMoved, [this](int value) { scale(static_cast(value) / 100.0f); }); } MainWindow::~MainWindow() { delete ui; } void MainWindow::resizeEvent(QResizeEvent *event) { fit(); QMainWindow::resizeEvent(event); } void MainWindow::fit() { const auto pixmpSize = current.size(); const auto scaleSize = pixmpSize.scaled(ui->scrollArea->viewport()->size(), Qt::KeepAspectRatio); const int scale = std::min(scaleSize.width() * 100 / pixmpSize.width(), scaleSize.height() * 100 / pixmpSize.height()); ui->label->setPixmap( current.scaled(scaleSize, Qt::KeepAspectRatio, Qt::SmoothTransformation)); ui->scale_slider->setValue(scale); ui->scale_label->setText(scale_format.arg(scale)); } void MainWindow::scale(double scale) { const auto scaleSize = current.size() * scale; ui->label->setPixmap( current.scaled(scaleSize, Qt::KeepAspectRatio, Qt::SmoothTransformation)); ui->scale_slider->setValue(scale * 100); ui->scale_label->setText(scale_format.arg(scale * 100)); }