QT 图片浏览器(二)

本文介绍了一个QT图片浏览器程序的设计与实现过程,重点讨论了解决在Linux环境下图片浏览顺序错乱及删除功能失效的问题。通过改进文件夹内图片的遍历方式,确保了图片浏览和操作的一致性和准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前边所写的QT图片浏览器程序是在window下QT Creator环境中编写的,在window上面运行效果很正确,但是因为是需要在linux下面的QT环境中编译,所以在linux下面编译以后运行出现的效果却不是理想想过,现象是在打开linux下面的图片以后,上下翻转不按文件夹中已经排列好的顺序显示,而是一个固定的另一个顺序,进而导致删除也不成功,最后更改了遍历打开图片所在文件夹下的全部图片这个功能函数的代码,换了一种遍历方法,最后得到了理想的效果。代码如下:

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;

    setWindowFlags(Qt::FramelessWindowHint);//去掉标题栏
    int screen_W=QApplication::desktop()->width();
    int screen_H=QApplication::desktop()->height();

    resize(screen_W,screen_H);
    //int win_W=width();
    //int win_H=height();
    //
    printf("abcdefghigk=====%d,------12345678910========%d-----------\n\n\n\n",screen_W,screen_H);
    /*
    QPushButton pbexit = new QPushButton(this);
    pbexit->setObjectName(QString::fromUtf8("pbexit"));
    pbexit->setGeometry(QRect(803,728,40,40));
    pbexit->setFocusPolicy(Qt::NoFocus);
    pbexit->setFlat(true);
    */
    ui->pre->setGeometry(523,728,40,40);
    ui->next->setGeometry(603,728,40,40);
    //ui->rotuteleft->setGeometry(203,728,40,40);
    //ui->rotuteright->setGeometry(283,728,40,40);
    ui->pbdelete->setGeometry(723,728,40,40);
    ui->pbexit->setGeometry(QRect(803,728,40,40));
    ui->rotuteleft->setEnabled(false);
    ui->rotuteright->setEnabled(false);

    QPixmap m_pixmap("res/pre.png");
    QIcon m_icon;
    m_icon.addPixmap(m_pixmap);
    ui->pre->setIcon(m_icon);
    ui->pre->setIconSize(QSize(40,40));

    m_pixmap.load("res/next.png");
    m_icon.addPixmap(m_pixmap);
    ui->next->setIcon(m_icon);
    ui->next->setIconSize(QSize(40,40));
/*
    m_pixmap.load("res/left.png");
    m_icon.addPixmap(m_pixmap);
    ui->rotuteleft->setIcon(m_icon);
    ui->rotuteleft->setIconSize(QSize(60,60));

    m_pixmap.load("res/right.png");
    m_icon.addPixmap(m_pixmap);
    ui->rotuteright->setIcon(m_icon);
    ui->rotuteright->setIconSize(QSize(60,60));
*/
    m_pixmap.load("res/imgdelete.png");
    m_icon.addPixmap(m_pixmap);
    ui->pbdelete->setIcon(m_icon);
    ui->pbdelete->setIconSize(QSize(40,40));

    m_pixmap.load("res/exit.png");
    m_icon.addPixmap(m_pixmap);
    ui->pbexit->setIcon(m_icon);
    ui->pbexit->setIconSize(QSize(40,40));
}

csImageScan::~csImageScan()
{
    delete ui;
}


/*
void csImageScan::drawImageOnSrc(QString & str)
{
    //
    ui->label->setPixmap(QPixmap(str));
    //
}
*/

//图片浏览对话框关闭按钮槽
void csImageScan::on_pbexit_clicked()
{
    this->close();
}
//打开图片浏览功能
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 *.bmp)"));

    filelist = filepath.split("/");
    filelist.removeLast ();
    folderpath = filelist.join("/");
    setpixmap(filepath);
    printf("-----%d------\n",position);
}

//遍历打开图片所在文件夹下的全部图片
void csImageScan::Open_File()
{
        QDir dir(folderpath);
        QFileInfoList fileList;
        QFileInfo curFile;
        QStringList filters;
        //filters << "*.jpg"<<"*.png";
        filters << "*.jpg"<<"*.png"<<"*.bmp";
        fileList=dir.entryInfoList(filters,QDir::Dirs|QDir::Files
                     |QDir::Readable|QDir::Writable
                     |QDir::Hidden|QDir::NoDotAndDotDot
                     ,QDir::Name);
        int i=0;
        if(fileList.size()>0)
        {
            //curFile=fileList[position];
            while(i<fileList.size())
            {
                curFile=fileList[i];
                if(filepath == curFile.filePath())
                    position = i;
                stringlist<<curFile.filePath();
                printf("----delete----%d----------\n",i);
                printf("%s----\n",curFile.filePath().toAscii().constData());
                //printf("%s----\n",filepath.toAscii().constData());
                i++;
            }

        }
}

//图片前翻
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);
    printf("---pre----%d-------------------\n",position);
    printf("%s----\n",filepath.toAscii().constData());
}

//图片后翻
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);
    printf("---next----%d-------------------\n",position);
    printf("%s----\n",filepath.toAscii().constData());
}
//图片逆时针旋转
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--;
        //QImage image(stringlist.at(position));
        QMatrix matrix;
        //matrix.rotate(-90.0*num_Roll);
        matrix.rotate(-90.0);
        image = image.transformed(matrix,Qt::FastTransformation);
        pix = pix.fromImage(image);
        update();
    }
    else
    {
    num_Roll++;
    //QImage image(stringlist.at(position));
    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)
    {
        //num_Roll--;
        //QImage image(stringlist.at(position));
        QMatrix matrix;
        //matrix.rotate(90.0*num_Roll);
        matrix.rotate(90.0);
        image = image.transformed(matrix,Qt::FastTransformation);
        pix = pix.fromImage(image);
        update();
    }
    else
    {
    num_Roll++;
    //QImage image(stringlist.at(position));
    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"<<"*.bmp";
        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);
            //QFile filetemp(curFile.filePath().remove(QString("_screen"), Qt::CaseSensitive));
            //filetemp.remove();
            printf("----delete----%d----------\n",position);
            printf("%s----\n",curFile.filePath().toAscii().constData());
        }
        if(0 == stringlist.size())
        {
            printf("get next image erron \n");
            return ;
        }
        else
        {
            filepath = stringlist.at(position);
            setpixmap(filepath);
        }
    }
}
//重绘事件
void csImageScan::paintEvent ( QPaintEvent * )
{
    QPainter painter(this);
    painter.drawPixmap(43,0,pix);
 }


void csImageScan::setpixmap(QString imageName)
{
    pix.load(imageName);
    update();
}

其他地方的代码完全相同。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值