QT 图片浏览器(二)

news/2025/2/21 10:23:16/

前边所写的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();
}

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


http://www.ppmy.cn/news/487802.html

相关文章

Qt图片浏览器

Windows的图片浏览器大家都用过&#xff0c;可以查看当前文件夹下的图片&#xff0c;往上翻、往下翻并且自动播放。在这一节里&#xff0c;Jungle将用Qt来设计这么一个图片浏览器&#xff0c;实现以下功能&#xff1a; ①浏览电脑里的文件夹&#xff0c;将当前文件夹下的图片列…

【jquery】收藏本站——添加到浏览器的收藏夹

<!DOCTYPE HTML><html lang"en-US"><head><meta charset"UTF-8"><title>收藏本站</title></head><body><a href"javascript:;" title"收藏本站" id"fav">收藏本站&l…

Qt 内嵌浏览器几种办法

1.使用axWidget QT axcontainer 然后ui里面就可以出现QAxWidget 直接拖入就可以 ui->axWidget->setControl(QString::fromUtf8("{8856F961-340A-11D0-A96B-00C04FD705A2}")); ui->axWidget->setFocusPolicy(Qt::StrongFocus); ui->axWidget…

QT收藏夹

董哥的黑板报

Qt学习之路之文件浏览器

Windows的资源管理器&#xff0c;大家很熟悉吧&#xff0c;可以放回上一级&#xff0c;查找到下一级.........Qt中QDir 类可以实现显示文件系统目录的效果。 笔者的机器环境&#xff1a;Windows8.1 看代码~~ fileview_widget.h #ifndef FILEVIEWWIDGET_H #define FILEVIEWWI…

Qt文件浏览器

都熟悉Windows下的文件浏览器&#xff0c;可以鼠标操作打开某个磁盘某个文件夹&#xff0c;或者某个子文件夹下的文件&#xff0c;也可以返回上一级菜单&#xff0c;还可以根据转至输入的指定的目录。 这里借用Qt来实现这么一个文件浏览器&#xff0c;实现以下功能&#xff1a;…

QT调用IE浏览器COM插件完成网页浏览

一、可用的嵌入式浏览器方案 QT在5.6之前可以webkit浏览器框架访问网页,在之后就去掉了webkit,加入了QWebEngineView框架,但是QWebEngineView只能支持VS编译器,mingw编译器不支持。 在后面的高版本QT里,mingw编译器如果要加载网页可以使用两种方式。 (1). 编译webkit源码…

qt简单的浏览器

qt简单的浏览器 1 .pro项目文件配置2 ui设计3 主要的3个类3.1 MyTabWidget3.2 MyWebView类3.3 MainWindow类 4 运行结果 1 .pro项目文件配置 添加webengine相关的模块 QT core gui webenginewidgets2 ui设计 方左边是三个按钮&#xff0c;分别是后退、前进和重载功能…