#include "PictureBrowser.h"
PictureBrowser::PictureBrowser(QWidget *parent, Qt::WFlags flags)
: QWidget(parent, flags)
{
ui.setupUi(this);
QTextCodec *codec = QTextCodec::codecForName("System");
QTextCodec::setCodecForTr(codec);
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
currentDirPath = "";
numofPic = 0;
///初始化定时器
timer = new QTimer(this);
///设定播放时间间隔
timer->setInterval(1500);///1.5s
///文件浏览器槽函数
connect(ui.lineEdit_currentPath,SIGNAL(returnPressed()),this,SLOT(showCurrentDirFiles()));
connect(ui.listWidget,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(showNextDirFiles(QListWidgetItem*)));
///显示图片槽函数
connect(ui.pushButton_lastPicture,SIGNAL(clicked()),this,SLOT(showLastPicture()));
connect(ui.pushButton_nextPicture,SIGNAL(clicked()),this,SLOT(showNextPicture()));
connect(ui.pushButton_autoPlay,SIGNAL(clicked()),this,SLOT(autoPlayPicture()));
connect(ui.listWidget,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(playCurrentItem(QListWidgetItem*)));
///自动播放
connect(this->timer,SIGNAL(timeout()),this,SLOT(showNextPicture()));
}
PictureBrowser::~PictureBrowser()
{
}
void PictureBrowser::showNextDirFiles(QListWidgetItem *item)
{
///获取鼠标双击的文件名字
QString strName = item->text();
QDir dir;
//设置路径为当前目录路径
dir.setPath(ui.lineEdit_currentPath->text());
//重新设置路径
dir.cd(strName);
//更新当前显示路径,并显示当前目录下所有文件
ui.lineEdit_currentPath->setText(dir.absolutePath());
showCurrentDirFiles();
}
void PictureBrowser::showCurrentDirFiles()
{
//获取当前输入的目录
QDir currentDir(ui.lineEdit_currentPath->text());
QStringList fileList;
fileList<<"*";
QFileInfoList infoList = currentDir.entryInfoList(fileList,QDir::AllEntries,QDir::DirsFirst);
//在QListWidget里显示文件列表
this->showFileInfoList(infoList);
//记录当前路径
if(!infoList.isEmpty())
{
this->currentDirPath = infoList[0].absoluteFilePath();
qDebug()<<currentDirPath;
}
}
void PictureBrowser::showFileInfoList(QFileInfoList pInfoList)
{
numofPic = 0;
ui.listWidget->clear();
for(int i=0;i<pInfoList.size();i++)
{
QFileInfo tmpInfo = pInfoList.at(i);
QString pFileName = tmpInfo.fileName();
QListWidgetItem *tmpItem = new QListWidgetItem(pFileName);
if(tmpInfo.isDir())
tmpItem->setIcon(*getItemPropertyIcon(1));
else
{
tmpItem->setIcon(*getItemPropertyIcon(2));
///获取文件后缀名
QString suffix = tmpInfo.suffix();
///只选取*.jpg,*.png格式文件
if(suffix.indexOf("jpg")<0 && suffix.indexOf("png")<0)
{
continue;
}
else
numofPic++;
}
ui.listWidget->addItem(tmpItem);
}
}
QIcon * PictureBrowser::getItemPropertyIcon(int iType)
{
QDir dir;
QString path = dir.currentPath();
switch(iType)
{
case 1:
return new QIcon(path+"/Folder.png");
break;
case 2:
return new QIcon(path+"/File.png");
break;
}
return NULL;
}
void PictureBrowser::playCurrentItem(QListWidgetItem* item)
{
QString strName = item->text();
if(strName.indexOf("jpg")>=0 || strName.indexOf("png")>=0)
{
///获取当前图片的绝对路径
QPixmap pic(currentDirPath+"/"+strName);
ui.label->setScaledContents(true);
ui.label->setPixmap(pic);
}
}
////显示上一张图片
void PictureBrowser::showLastPicture()
{
///获取当前图片在当前文件夹中的索引
int currentIndex = ui.listWidget->currentRow();
if(currentIndex!=2)
{
///当前图片不是第一张,则显示上一张
showPicture(currentIndex-1);
///鼠标移动至上一张
ui.listWidget->setCurrentRow(currentIndex-1);
}
else
{
///当前图片是第一张,则显示最后一张
showPicture(numofPic+1);
///鼠标移动至上一张
ui.listWidget->setCurrentRow(numofPic+1);
}
}
////显示下一张图片
void PictureBrowser::showNextPicture()
{
///获取当前图片在当前文件夹中的索引
int currentIndex = ui.listWidget->currentRow();
if(currentIndex!=numofPic+1)
{
///当前图片不是最后一张,则显示下一张
showPicture(currentIndex+1);
///鼠标移动至下一张
ui.listWidget->setCurrentRow(currentIndex+1);
}
else
{
///当前图片是最后一张,则显示第一张
showPicture(2);
///鼠标移动至下一张
ui.listWidget->setCurrentRow(2);
}
}
////显示图片
void PictureBrowser::showPicture(int num)
{
QListWidgetItem* item = ui.listWidget->item(num);
QString strName = item->text();
///获取当前图片的绝对路径
QPixmap pic(currentDirPath+"/"+strName);
ui.label->setScaledContents(true);
ui.label->setPixmap(pic);
}
////自动播放
void PictureBrowser::autoPlayPicture()
{
QString str = ui.pushButton_autoPlay->text();
if(str == "自动播放")
{
this->timer->start();
showPicture(ui.listWidget->currentRow());
ui.pushButton_autoPlay->setText("停止");
}
else
{
this->timer->stop();
ui.pushButton_autoPlay->setText("自动播放");
}
}