04 QT实现一个简单的看图程序

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();
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值