QT 图片浏览器(一)

这一段时间在做一个图片浏览器,实现图片左右浏览,图片删除,图片旋转的功能,在初期的时候我在window系统下面的QT Creator中编写代码,编写以后实现了以上所说的功能。虽然难度不是很大,但是在编写的时候由于能力有限,也花费了我很多时间,希望这段代码对大家有所帮助

由于ui文件没办法上传,所以只能讲ui文件的.h文件写在这里

ui_csimagescan.h

 #include "csimagescan.h"

#include "ui_csimagescan.h"
csImageScan::csImageScan(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::csImageScan)
{
    ui->setupUi(this);
    position =0;
    left=0;
    right=0;
    num_Roll = 0;
    //为前后翻转按钮,顺时针逆时针旋转按钮和删除按钮添加图标
    QPixmap m_pixmap("image/pre.png");//前翻转
    QIcon m_icon;
    m_icon.addPixmap(m_pixmap);
    ui->pre->setIcon(m_icon);
    ui->pre->setIconSize(QSize(60,60));
    m_pixmap.load("image/next.png");//后翻转
    m_icon.addPixmap(m_pixmap);
    ui->next->setIcon(m_icon);
    ui->next->setIconSize(QSize(60,60));
    m_pixmap.load("image/left.png");//逆时针
    m_icon.addPixmap(m_pixmap);
    ui->rotuteleft->setIcon(m_icon);
    ui->rotuteleft->setIconSize(QSize(60,60));
    m_pixmap.load("image/right.png");//顺时针
    m_icon.addPixmap(m_pixmap);
    ui->rotuteright->setIcon(m_icon);
    ui->rotuteright->setIconSize(QSize(60,60));
    m_pixmap.load("image/imgdelete.png");//删除
    m_icon.addPixmap(m_pixmap);
    ui->pbdelete->setIcon(m_icon);
    ui->pbdelete->setIconSize(QSize(60,60));
}
csImageScan::~csImageScan()
{
    delete ui;
}
void csImageScan::on_open_clicked()//打开对话框选择图片
{
    position =0;
    stringlist.clear();
    //   printf("%s\n",filepath.toAscii().constData());
    filepath = QFileDialog::getOpenFileName(NULL, QObject::tr("Open Image"), ".",
                                            QObject::tr("Image Files(*.jpg *.png)"));
    filelist = filepath.split("/");
    filelist.removeLast ();
    folderpath = filelist.join("/");//打开图片所在的文件夹路径
    setpixmap(filepath);
    Open_File(folderpath);//遍历文件夹下边的图片类型文件
}
void csImageScan::Open_File(QString path)//遍历文件夹下边的图片类型文件
{
    QDirIterator m_DirIterator(path,QDir::Files|QDir::NoSymLinks);
    while (m_DirIterator.hasNext())
    {
        QString tempFile=m_DirIterator.next();
        QStringList list=tempFile.split(".");
        //list.takeFirst();
        //QString expandedName=list.takeFirst();
        QString expandedName=list.takeLast();
        if(expandedName=="jpg"||expandedName=="JPG"||expandedName=="png"||expandedName=="PNG"||expandedName=="bmp"||expandedName=="BMP")
        stringlist<<tempFile;
    }
    getposition(stringlist);//获得打开图片在stringlist中的位置
}
//获得打开图片在stringlist中的位置
void csImageScan::getposition(QStringList imagelist)
{
    //num=0;
    QListIterator<QString> it(imagelist);
    while(it.hasNext())
    {
        if(filepath == it.next())
            break;
        else
            position++;
    }
}
//上一张图片
void csImageScan::on_pre_clicked()
{
    left=0;
    right=0;
    num_Roll = 0;
    if(0 == stringlist.size())
    {
        printf("get pre image erron \n");
        return ;
    }
    position--;
    if(position<0)
    {
        position=stringlist.size()-1;
    }
    filepath = stringlist.at(position);
    setpixmap(filepath);
}
//下一张图片
void csImageScan::on_next_clicked()
{
    left=0;
    right=0;
    num_Roll = 0;
    if(0 == stringlist.size())
    {
        printf("get next image erron \n");
        return ;
    }
    position++;
    if(position>stringlist.size()-1)
    {
        position=0;
    }
    filepath = stringlist.at(position);
    setpixmap(filepath);
}
//逆时针旋转
void csImageScan::on_rotuteleft_clicked()
{
    if(0 == stringlist.size())
    {
        printf("get next image erron \n");
        return ;
    }
    left=1;
    if(left==1&&right==1)
    {
        num_Roll--;
        QMatrix matrix;
        matrix.rotate(-90.0);
        image = image.transformed(matrix,Qt::FastTransformation);
        pix = pix.fromImage(image);
        update();
    }
    else
    {
    num_Roll++;
    image.load(stringlist.at(position));
    QMatrix matrix;
    matrix.rotate(-90.0*num_Roll);
    image = image.transformed(matrix,Qt::FastTransformation);
    pix = pix.fromImage(image);
    update();
    }
}
//顺时针旋转
void csImageScan::on_rotuteright_clicked()
{
    if(0 == stringlist.size())
    {
        printf("get next image erron \n");
        return ;
    }
    right=1;
    if(left==1&&right==1)
    {
        QMatrix matrix;
        matrix.rotate(90.0);
        image = image.transformed(matrix,Qt::FastTransformation);
        pix = pix.fromImage(image);
        update();
    }
    else
    {
    num_Roll++; 
    image.load(stringlist.at(position));
    QMatrix matrix;
    matrix.rotate(90.0*num_Roll);
    image = image.transformed(matrix,Qt::FastTransformation);
    pix = pix.fromImage(image);
    update();
    }
}
//删除图片
void csImageScan::on_pbdelete_clicked()
{
    if(stringlist.size() == 0)
        return;
    QMessageBox::StandardButton rb = QMessageBox::question(NULL,"Warning",
                 "Do you want to delete the picture?",QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
    if(rb == QMessageBox::Yes)
    {
        stringlist.takeAt(position);
        QDir dir(folderpath);
        QFileInfoList fileList;
        QFileInfo curFile;
        QStringList filters;
        filters << "*.jpg"<<"*.png";
        fileList=dir.entryInfoList(filters,QDir::Dirs|QDir::Files
                     |QDir::Readable|QDir::Writable
                     |QDir::Hidden|QDir::NoDotAndDotDot
                     ,QDir::Name);
        if(fileList.size()>0)
        {
            curFile=fileList[position];
            QFile fileTemp(curFile.filePath());
            fileTemp.remove();
            fileList.removeAt(position);
        }
        if(0 == stringlist.size())
        {
            printf("get next image erron \n");
            return ;
        }
        filepath = stringlist.at(position);//删除图片以后每张图片的位置就会自动减一,所以仍然加载这个位置的图片就是删除图片的下一张图片
        setpixmap(filepath);
    }
}
//重绘事件
void csImageScan::paintEvent ( QPaintEvent * )
{
    QPainter painter(this);
    painter.drawPixmap(20,20,pix);
}
//加载图片
void csImageScan::setpixmap(QString imageName)
{
    pix.load(imageName);
    update();
}

 csimagescan.h

#ifndef CSIMAGESCAN_H

#define CSIMAGESCAN_H
#include <QDialog>
#include <QtGui>
namespace Ui {
    class csImageScan;
}
class csImageScan : public QDialog
{
    Q_OBJECT
public:
    explicit csImageScan(QWidget *parent = 0);
    ~csImageScan();
public:
    QString         filepath;//打开图片的路径
    QString         folderpath;
    QStringList     filelist;
    QStringList     stringlist;
    QImage          image;
    QPixmap         pix;
    int             position;//图片在文件夹中的位置
    int             num_Roll;//旋转次数,通过旋转次数来得到旋转角度
    bool            left;
    bool            right;
private:
    Ui::csImageScan *ui;
public:
    void paintEvent (QPaintEvent * );
    void setpixmap(QString );
    void Open_File(QString);
    void getposition(QStringList);
private slots:
    void on_pbdelete_clicked();
    void on_rotuteright_clicked();
    void on_rotuteleft_clicked();
    void on_next_clicked();
    void on_pre_clicked();
    void on_open_clicked();
};
#endif // CSIMAGESCAN_H

 

csimagescan.cpp

#include "csimagescan.h"

#include "ui_csimagescan.h"
csImageScan::csImageScan(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::csImageScan)
{
    ui->setupUi(this);
    position =0;
    left=0;
    right=0;
    num_Roll = 0;
    //为前后翻转按钮,顺时针逆时针旋转按钮和删除按钮添加图标
    QPixmap m_pixmap("image/pre.png");//前翻转
    QIcon m_icon;
    m_icon.addPixmap(m_pixmap);
    ui->pre->setIcon(m_icon);
    ui->pre->setIconSize(QSize(60,60));
    m_pixmap.load("image/next.png");//后翻转
    m_icon.addPixmap(m_pixmap);
    ui->next->setIcon(m_icon);
    ui->next->setIconSize(QSize(60,60));
    m_pixmap.load("image/left.png");//逆时针
    m_icon.addPixmap(m_pixmap);
    ui->rotuteleft->setIcon(m_icon);
    ui->rotuteleft->setIconSize(QSize(60,60));
    m_pixmap.load("image/right.png");//顺时针
    m_icon.addPixmap(m_pixmap);
    ui->rotuteright->setIcon(m_icon);
    ui->rotuteright->setIconSize(QSize(60,60));
    m_pixmap.load("image/imgdelete.png");//删除
    m_icon.addPixmap(m_pixmap);
    ui->pbdelete->setIcon(m_icon);
    ui->pbdelete->setIconSize(QSize(60,60));
}
csImageScan::~csImageScan()
{
    delete ui;
}
void csImageScan::on_open_clicked()//打开对话框选择图片
{
    position =0;
    stringlist.clear();
    //   printf("%s\n",filepath.toAscii().constData());
    filepath = QFileDialog::getOpenFileName(NULL, QObject::tr("Open Image"), ".",
                                            QObject::tr("Image Files(*.jpg *.png)"));
    filelist = filepath.split("/");
    filelist.removeLast ();
    folderpath = filelist.join("/");//打开图片所在的文件夹路径
    setpixmap(filepath);
    Open_File(folderpath);//遍历文件夹下边的图片类型文件
}
void csImageScan::Open_File(QString path)//遍历文件夹下边的图片类型文件
{
    QDirIterator m_DirIterator(path,QDir::Files|QDir::NoSymLinks);
    while (m_DirIterator.hasNext())
    {
        QString tempFile=m_DirIterator.next();
        QStringList list=tempFile.split(".");
        //list.takeFirst();
        //QString expandedName=list.takeFirst();
        QString expandedName=list.takeLast();
        if(expandedName=="jpg"||expandedName=="JPG"||expandedName=="png"||expandedName=="PNG"||expandedName=="bmp"||expandedName=="BMP")
        stringlist<<tempFile;
    }
    getposition(stringlist);//获得打开图片在stringlist中的位置
}
//获得打开图片在stringlist中的位置
void csImageScan::getposition(QStringList imagelist)
{
    //num=0;
    QListIterator<QString> it(imagelist);
    while(it.hasNext())
    {
        if(filepath == it.next())
            break;
        else
            position++;
    }
}
//上一张图片
void csImageScan::on_pre_clicked()
{
    left=0;
    right=0;
    num_Roll = 0;
    if(0 == stringlist.size())
    {
        printf("get pre image erron \n");
        return ;
    }
    position--;
    if(position<0)
    {
        position=stringlist.size()-1;
    }
    filepath = stringlist.at(position);
    setpixmap(filepath);
}
//下一张图片
void csImageScan::on_next_clicked()
{
    left=0;
    right=0;
    num_Roll = 0;
    if(0 == stringlist.size())
    {
        printf("get next image erron \n");
        return ;
    }
    position++;
    if(position>stringlist.size()-1)
    {
        position=0;
    }
    filepath = stringlist.at(position);
    setpixmap(filepath);
}
//逆时针旋转
void csImageScan::on_rotuteleft_clicked()
{
    if(0 == stringlist.size())
    {
        printf("get next image erron \n");
        return ;
    }
    left=1;
    if(left==1&&right==1)
    {
        num_Roll--;
        QMatrix matrix;
        matrix.rotate(-90.0);
        image = image.transformed(matrix,Qt::FastTransformation);
        pix = pix.fromImage(image);
        update();
    }
    else
    {
    num_Roll++;
    image.load(stringlist.at(position));
    QMatrix matrix;
    matrix.rotate(-90.0*num_Roll);
    image = image.transformed(matrix,Qt::FastTransformation);
    pix = pix.fromImage(image);
    update();
    }
}
//顺时针旋转
void csImageScan::on_rotuteright_clicked()
{
    if(0 == stringlist.size())
    {
        printf("get next image erron \n");
        return ;
    }
    right=1;
    if(left==1&&right==1)
    {
        QMatrix matrix;
        matrix.rotate(90.0);
        image = image.transformed(matrix,Qt::FastTransformation);
        pix = pix.fromImage(image);
        update();
    }
    else
    {
    num_Roll++; 
    image.load(stringlist.at(position));
    QMatrix matrix;
    matrix.rotate(90.0*num_Roll);
    image = image.transformed(matrix,Qt::FastTransformation);
    pix = pix.fromImage(image);
    update();
    }
}
//删除图片
void csImageScan::on_pbdelete_clicked()
{
    if(stringlist.size() == 0)
        return;
    QMessageBox::StandardButton rb = QMessageBox::question(NULL,"Warning",
                 "Do you want to delete the picture?",QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
    if(rb == QMessageBox::Yes)
    {
        stringlist.takeAt(position);
        QDir dir(folderpath);
        QFileInfoList fileList;
        QFileInfo curFile;
        QStringList filters;
        filters << "*.jpg"<<"*.png";
        fileList=dir.entryInfoList(filters,QDir::Dirs|QDir::Files
                     |QDir::Readable|QDir::Writable
                     |QDir::Hidden|QDir::NoDotAndDotDot
                     ,QDir::Name);
        if(fileList.size()>0)
        {
            curFile=fileList[position];
            QFile fileTemp(curFile.filePath());
            fileTemp.remove();
            fileList.removeAt(position);
        }
        if(0 == stringlist.size())
        {
            printf("get next image erron \n");
            return ;
        }
        filepath = stringlist.at(position);//删除图片以后每张图片的位置就会自动减一,所以仍然加载这个位置的图片就是删除图片的下一张图片
        setpixmap(filepath);
    }
}
//重绘事件
void csImageScan::paintEvent ( QPaintEvent * )
{
    QPainter painter(this);
    painter.drawPixmap(20,20,pix);
}
//加载图片
void csImageScan::setpixmap(QString imageName)
{
    pix.load(imageName);
    update();
}
 
 

 

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值