用qt实现了windows的照片浏览器

完全是为了哄女朋友开心,加上好久没有碰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();
}
发布了124 篇原创文章 · 获赞 24 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42214953/article/details/105295186