用QT写一个查看图片的程序,要求点击“上一张”和“下一张”实现显示图片,基类为dialog
时间: 2024-05-09 11:21:25 浏览: 47
以下是一个简单的示例程序:
mainwindow.h:
```cpp
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QDialog>
#include <QLabel>
#include <QHBoxLayout>
#include <QPushButton>
class MainWindow : public QDialog
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void previousImage();
void nextImage();
private:
QLabel *imageLabel;
QHBoxLayout *buttonLayout;
QPushButton *previousButton;
QPushButton *nextButton;
QStringList imageList;
int currentImageIndex;
};
#endif // MAINWINDOW_H
```
mainwindow.cpp:
```cpp
#include "mainwindow.h"
#include <QDir>
#include <QFileInfoList>
#include <QPixmap>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QDialog(parent)
{
// 初始化界面
imageLabel = new QLabel(this);
imageLabel->setAlignment(Qt::AlignCenter);
imageLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
previousButton = new QPushButton(tr("上一张"), this);
nextButton = new QPushButton(tr("下一张"), this);
buttonLayout = new QHBoxLayout;
buttonLayout->addWidget(previousButton);
buttonLayout->addWidget(nextButton);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(imageLabel);
mainLayout->addLayout(buttonLayout);
setLayout(mainLayout);
// 加载图片列表
QDir dir("images");
QFileInfoList fileList = dir.entryInfoList(QStringList() << "*.png" << "*.jpg" << "*.jpeg", QDir::Files);
for (int i = 0; i < fileList.count(); ++i) {
imageList.append(fileList.at(i).absoluteFilePath());
}
// 显示第一张图片
currentImageIndex = 0;
QPixmap pixmap(imageList.at(currentImageIndex));
imageLabel->setPixmap(pixmap.scaled(imageLabel->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation));
// 连接信号和槽
connect(previousButton, &QPushButton::clicked, this, &MainWindow::previousImage);
connect(nextButton, &QPushButton::clicked, this, &MainWindow::nextImage);
}
MainWindow::~MainWindow()
{
}
void MainWindow::previousImage()
{
if (currentImageIndex > 0) {
currentImageIndex--;
QPixmap pixmap(imageList.at(currentImageIndex));
imageLabel->setPixmap(pixmap.scaled(imageLabel->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation));
}
}
void MainWindow::nextImage()
{
if (currentImageIndex < imageList.count() - 1) {
currentImageIndex++;
QPixmap pixmap(imageList.at(currentImageIndex));
imageLabel->setPixmap(pixmap.scaled(imageLabel->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation));
}
}
```
注意:
1. 程序默认在当前目录下的“images”文件夹中查找图片,可以根据需要修改这个路径。
2. 程序只支持查看PNG、JPG和JPEG格式的图片。
3. 程序没有对图片的大小进行限制,如果图片太大,可能会导致界面变得很慢。如果需要限制图片的大小,可以通过设置label的最大大小来实现。
阅读全文