项目简介
实现打开多张图片,左滑就能查看上一张,右滑查看下一张
别人的软件:HD看图
咱的效果
QT Ui
- 显示图片区域是一个 label
- 左右箭头是一个 pushButton 查看上一张 下一张图片的
- 中间的单行文本框(lineEdit)显示图片路径
- 选择图片:单击打开文件对话框选择多张图片
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QDebug>
#include <QString>
#include <QFileDialog>
#include <QStringList>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
//可以单击按钮 右键转到槽 除非你名字跟我一样
void on_selectImg_clicked();
void on_preimg_clicked();
void on_nextimg_clicked();
private:
Ui::Widget *ui;
QPixmap pixMap; //图片对象
QStringList filenameList; //图片列表
int imgLength; //图片张数
int index_img; //当前图片下标
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
imgLength = 0;
index_img = 0;
ui->imageBox->setScaledContents(true); //图片自适应
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_selectImg_clicked()
{
filenameList = QFileDialog::getOpenFileNames(this,"打开多张图片",
"F:/images","Images (*.png *.xpm *.jpg *.png);;");
imgLength = filenameList.length();
QString filename = filenameList.at(index_img);
pixMap.load(filename);
ui->imageBox->setPixmap(pixMap);
ui->path->setText(filename);
qDebug()<<"length: "<<imgLength;
}
void Widget::on_preimg_clicked()
{
index_img--;
if(filenameList.isEmpty()) return;
//显示上一张图片
if(index_img < 0){
index_img = imgLength - 1;
}
//qDebug()<<"index: "<<index_img;
QString filename = filenameList.at(index_img);
pixMap.load(filename);
ui->imageBox->setPixmap(pixMap);
ui->path->setText(filename);
}
void Widget::on_nextimg_clicked()
{
//显示下一张图片
if(filenameList.isEmpty()) return;
if(index_img > imgLength-1){
index_img = 0;
}
QString filename = filenameList.at(index_img);
pixMap.load(filename);
ui->imageBox->setPixmap(pixMap);
ui->path->setText(filename);
index_img++;
}
总结
相应了三个按钮的事件,一个是可以打开多张图片的文件对话框,另外两个是查看上一张和下一张图片
打开多张图片的文件对话框
#include <QString>
#include <QFileDialog>
#include <QStringList>
filenameList = QFileDialog::getOpenFileNames(this,"打开多张图片",
"F:/images","Images (*.png *.xpm *.jpg *.png);;");
/*
getOpenFileNames 参数
widget对象 对话框标题 打开的文件目录 文件过滤器(这里是图片)
*/