QDir类用于管理目录的操作
QDir(const QString &path = QString())
//创建对象时,可以指定此对象是操作的目录的路径
QStringList entryList(const QStringList &nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort) const
//获取目录里的文件名,并过滤。 返回一个字符串数组的首地址
// QStringList其实就类模板QList<QString>
QString path() const
// 获取当前对象所操作的目录路径
main.cpp
#include <QApplication>
#include <QWidget>
#include <QPixmap>
#include <QDir>
#include <QDebug>
#include <QLabel>
#include <QKeyEvent>
#include <QResizeEvent>
class MyWin : public QWidget {
private:
QDir *dir; //指向操作目录的对象
QStringList files; //存放文件名列表
QLabel *label; //用于显示图像
int num; //记录当前显示的是第几个文件
protected:
void keyPressEvent(QKeyEvent *e); //捕捉按键事件
void resizeEvent(QResizeEvent *event); //捕捉窗口大小发生改变的事件
public:
MyWin(QString dir_path, QWidget *parent = NULL); //创建对象时需指定图像文件的路径
~MyWin();
};
MyWin::MyWin(QString dir_path, QWidget *parent) : QWidget(parent)
{
label = new QLabel(this);
dir = new QDir(dir_path); // 创建目录对象,并指定操作的目录路径
QStringList filters; //用于指定过滤文件类型
filters << "*.jpg" << "*.bmp" << "*.png"; //指定只获取扩展名为这三种的图像文件名
files = dir->entryList(filters, QDir::Files, QDir::Time); //获取目录里面的过虑后的文件名
num = 0; //初始时,显示第0张图
if (0 == files.size()) //如果获取文件的个数为0时不显示图像.
return;
label->resize(this->size()); //设置标签为窗口的大小
label->setScaledContents(true); //缩放图像
label->setPixmap(QPixmap(dir->path()+"/"+files[0])); //不要忘了操作符重载
}
MyWin::~MyWin()
{
delete dir;
delete label;
}
void MyWin::keyPressEvent(QKeyEvent *e)
{
int n = num;
if (0 == files.size())
return;
switch (e->key())
{
case Qt::Key_Left: //看前一张图像,如果到头,则改为从最后一张开始
n--;
if (n < 0)
n = files.size()-1;
break;
case Qt::Key_Right: //看后一张图像,如果到最后,则改为从第一张重新开始
n++;
if (n >= files.size())
n = 0;
break;
}
if (n == num)
return;
num = n;
label->setPixmap(QPixmap(dir->path()+"/"+files[n]));
}
void MyWin::resizeEvent(QResizeEvent *event)
{
label->resize(event->size()); //标签大小随窗口大小改变而改变
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyWin win("/icons");
MyWin win2("/disk3/allshares");
win.show();
win2.show();
return a.exec();
}