前边所写的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();
}
其他地方的代码完全相同。