完全是为了哄女朋友开心,加上好久没有碰Qt了,一些基本的操作都忘光了,再加上我发现windows上的照片浏览器的功能不是很齐全,所以想重新实现一个照片浏览器专门来存女朋友的照片(哎,不经意间撒了狗粮,对不起,我的错)。
可以发现,windows上的照片浏览器并没有删除照片的按钮,我在Windows照片浏览器的基础上增加了添加和删除的功能,首先看一下效果:
主要功能很清新吧:主要就是添加一个label,为label添加背景照片。相信看了的人都能学会。
接下来看一下ui图:
四个button,一个label,解决。
我们这里讲一下照片的搜寻和添加:
1.照片搜寻
照片搜寻我们可以遍历某个固定文件夹下的文件,然后将文件夹下的所有文件名存入一个链表,然后定义索引,根据索引去显示照片,照片搜寻的代码如下:
“solu.h”
#ifndef SOLU_H
#define SOLU_H
# include<QDir>
#endif // SOLU_H
#include<qdebug.h>
# include<QFileInfoList>
#include<qstring.h>
QString load ="D:/Qt_code/Photo/照片/";
QFileInfoList FindFile(QString name)
{
QDir dir(name);
if(!dir.exists())
{
qDebug()<<"文件夹不存在"<<endl;
}
//取到所有的文件和文件名,去掉.和..文件夹
dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);
dir.setSorting(QDir::DirsFirst);
//将其转化为一个list
QFileInfoList list = dir.entryInfoList();
if(list.size()<1)
qDebug()<<"文件夹为空"<<endl;
return list;
}
3.照片的添加
其实也很简单,就是打开一个文件窗口,选择文件,将文件拷贝到相应的目录下面,再去更新用于查看照片的list数组。
整个项目分为4个文件,“solu.h”上面已经给出,我将剩下的其他几个文件附在下面。
“mainwindow.h”和"mainwindow.cpp"
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
# include<QString>
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
//在label上根据路径显示一张图片
void DisplayPhoto(QString name);
private slots:
//下一张
void on_pushButton_3_clicked();
//上一张
void on_pushButton_4_clicked();
//添加
void on_pushButton_2_clicked();
//删除
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<qpixmap.h>
#include<solu.h>
# include<qdir.h>
# include<QMessageBox>
#include<QString>
#include<qfiledialog.h>
static QFileInfoList list = FindFile(load);
static int photoIndex=0;//查看照片的索引,为List的下标
static char newphotoIndex = '0;//用于命名新添加的照片
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//设置
this->setMaximumSize(400,500);
this->setMinimumSize(400,500);
}
MainWindow::~MainWindow()
{
delete ui;
}
//照片显示
void MainWindow::DisplayPhoto(QString name)
{
QPixmap photo(load+name);
photo = photo.scaled(ui->label->width(),ui->label->height(),Qt::KeepAspectRatio);
ui->label->setPixmap(photo);
}
//下一张
void MainWindow::on_pushButton_3_clicked()
{
if(list.size()<1)
{
QMessageBox::warning(this,QStringLiteral("error"),QStringLiteral("暂无照片"));
return;
}
DisplayPhoto(list.at(photoIndex).fileName());
++photoIndex;
if(photoIndex>=list.size())
{
photoIndex=0;
}
}
//上一张
void MainWindow::on_pushButton_4_clicked()
{
if(list.size()<1)
{
QMessageBox::warning(this,QStringLiteral("error"),QStringLiteral("暂无照片"));
return;
}
DisplayPhoto(list.at(photoIndex).fileName());
--photoIndex;
if(photoIndex<0)
{
photoIndex=list.size()-1;
}
}
//添加照片
void MainWindow::on_pushButton_2_clicked()
{
//打开文件窗口选择文件
QFileDialog *fileDialog = new QFileDialog(this);
fileDialog->setGeometry(100,100,800,900);
fileDialog->setDirectory(".");
//过滤文件
fileDialog->setNameFilter("Image Files(*.jpg *.png *.gif)");
//设置可以选择多个文件
fileDialog->setFileMode(QFileDialog::ExistingFiles);
fileDialog->setVisible(true);
//得到选择文件名
QStringList fileName;
if(fileDialog->exec()==QDialog::Accepted)
{
fileName=fileDialog->selectedFiles();
for(int i =0;i<fileName.size();++i)
{
//将选择的文件拷贝进load中
qDebug()<<fileName.at(i)<<endl;
qDebug()<<load<<endl;
QString name = fileName.at(i);
//对照片类型进行判断
QString newName;
if(name.right(4)==".jpg")
{
newName =load+newphotoIndex+".jpg";
}
if(name.right(4)==".png")
{
newName =load+newphotoIndex+".png";
}
if(name.right(4)==".gif")
{
newName =load+newphotoIndex+".gif";
}
qDebug()<<newName<<endl;
if(!QFile::copy(fileName.at(i),newName))
{
QMessageBox::warning(this,QStringLiteral("error"),QStringLiteral("添加失败"));
return;
}
QMessageBox::warning(this,QStringLiteral("error"),QStringLiteral("添加成功"));
newphotoIndex++;
//更新list
list = FindFile(load);
//显示新添加的照片
DisplayPhoto(list.at(list.size()-1).fileName());
}
}
}
void MainWindow::on_pushButton_clicked()
{
QString deleteName = load+list.at(photoIndex).fileName();
if(QFile::remove(deleteName))
{
QMessageBox::warning(this,QStringLiteral("error"),QStringLiteral("删除完成"));
}
//更新
photoIndex=0;
list =FindFile(load);
DisplayPhoto(list.at(photoIndex).fileName());
}
"main.cpp"
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}