您好,欢迎来到外链网!
当前位置:外链网 » 站长资讯 » 专业问答 » 文章详细 订阅RssFeed

qt 片浏览器,qt设计片浏览器

来源:互联网 浏览:65次 时间:2023-04-08

完全是为了哄女朋友开心,加上好久没有碰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_OBJECTpublic: 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();}

?

27903657