显示效果
涉及QT接口解释
-
QMainWindow
:(主窗)QMainWindow
是 Qt 中所有主窗口类的基类。它为应用程序的主窗口提供了一个框架,可以包含菜单栏、工具栏、状态栏和中心小部件。在代码中,MainWindow
类继承自QMainWindow
,并设置了一个用户界面(ui
),这是通过Ui::MainWindow
类生成的。
-
QFileDialog
:(打开文件)QFileDialog
提供了一个对话框,允许用户选择文件或目录。在代码中,getOpenFileNames
方法用于打开一个文件选择对话框,允许用户选择一个或多个图片文件。这个方法接受四个参数:父窗口、对话框标题、默认打开的目录和文件过滤器。
QString getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())
-
QListWidgetItem
:(文件列表项)QListWidgetItem
是QListWidget
中的项目。在代码中,当用户双击列表中的项目时,会触发on_listWidget_itemDoubleClicked
事件处理函数,该函数通过item->text()
获取项目的文本,即图片的路径。
-
QListWidget
:(文件列表)QListWidget
是一个基于项目的列表视图,可以用来显示列表项。在代码中,addItems
方法用于将用户选择的图片文件路径添加到列表中。clear
方法用于清除列表中的所有项目。currentRow
和setCurrentRow
方法用于获取和设置当前选中的行。currentItem
方法用于获取当前选中的项目。
-
QPixmap
:(图片隐射)QPixmap
是一个用于加载和操作图像的类。在代码中,它用于从文件加载图片,并将其设置为标签的图片。scaled
方法用于缩放图片,而transformed
方法用于应用变换,如旋转。
-
QLabel
:(标签)QLabel
是一个用于显示文本或图像的简单窗口小部件。在代码中,setPixmap
方法用于在标签上显示加载的图片。
-
QTransform
:(旋转)QTransform
提供了一个 2D 变换矩阵,可以用于平移、缩放、旋转、倾斜等变换。在代码中,rotate
方法用于创建一个旋转变换,然后将这个变换应用于图片。
-
QSize
:QSize
是一个用于保存二维空间中的尺寸(宽度和高度)的类。在代码中,它用于计算图片缩放后的新尺寸。
-
Qt::KeepAspectRatio
和Qt::SmoothTransformation
:- 这些是
QPixmap
的缩放选项。Qt::KeepAspectRatio
是一个缩放模式,用于保持图片的宽高比。Qt::SmoothTransformation
是一个缩放算法,用于平滑地缩放图片,以减少锯齿效果。
- 这些是
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
ui->listWidget->clear();
QStringList files = QFileDialog::getOpenFileNames(
this,
"Select one or more files to open",
"/home",
"Images (*.png *.bmp *.jpg *.webp)");
ui->listWidget->addItems(files);
}
void MainWindow::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
//获取图片的路径名
QString path = item->text();
QPixmap pic(path); //初始化图片类
ui->label->setPixmap(pic);
}
void MainWindow::on_pushButton_7_clicked()
{
//获取当前列表的活跃行
int row = ui->listWidget->currentRow();
row--;
if(row < 0)
{
row= ui->listWidget->count()-1;
}
//设置当前的活跃行
ui->listWidget->setCurrentRow(row);
//获取当前活跃行
QString path = ui->listWidget->currentItem()->text();
QPixmap pic(path); //初始化图片类
ui->label->setPixmap(pic);
}
void MainWindow::on_pushButton_6_clicked()
{
//获取当前列表的活跃行
int row = ui->listWidget->currentRow();
row++;
if(row >= ui->listWidget->count())
{
row = 0;
}
//设置当前的活跃行
ui->listWidget->setCurrentRow(row);
//获取当前活跃行
QString path = ui->listWidget->currentItem()->text();
QPixmap pic(path); //初始化图片类
ui->label->setPixmap(pic);
}
//旋转
void MainWindow::rotateImage(int angle) {
const QPixmap *originalPixmap = ui->label->pixmap(); // 获取标签中的 Pixmap
QTransform transform;
transform.rotate(angle); // 设置旋转角度
// 创建一个新的 Pixmap,应用旋转转换
QPixmap newPixmap = originalPixmap->transformed(transform);
// 更新标签以显示旋转后的图像
ui->label->setPixmap(newPixmap);
}
void MainWindow::zoomImage(double factor) {
const QPixmap *originalPixmap = ui->label->pixmap();
QSize newSize = originalPixmap->size() * factor; // 计算新的大小
// 创建一个新的 Pixmap,按比例缩放图像
QPixmap newPixmap = originalPixmap->scaled(newSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
// 更新标签以显示缩放后的图像
ui->label->setPixmap(newPixmap);
}
void MainWindow::on_pushButton_2_clicked()
{
this->zoomImage(1.2);
}
void MainWindow::on_pushButton_3_clicked()
{
this->zoomImage(0.8);
}
void MainWindow::on_pushButton_4_clicked()
{
this->rotateImage(-90);
}
void MainWindow::on_pushButton_5_clicked()
{
this->rotateImage(90);
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QListWidgetItem>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void zoomImage(double factor);
void rotateImage(int angle);
private slots:
void on_pushButton_clicked();
void on_listWidget_itemDoubleClicked(QListWidgetItem *item);
void on_pushButton_7_clicked();
void on_pushButton_6_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
void on_pushButton_4_clicked();
void on_pushButton_5_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H