用QFileSystemModel和Listview做的简易图片浏览

 

QFileSystemModel这个类今天第一次用到,个人理解QFileSystemMode这个类主要是用来监视文件系统中的某个目录的变化,并及时更新数据。先介绍一下他的成员函数,

QFileSystemModel* model= new QFileSystemModel();
 model->setNameFilterDisables(false);

setNameFilterDisables 是用来设置文件名是否可以重命名。接着看下面

model->setFilter(QDir::Dirs|QDir::Drives|QDir::Files|QDir::NoDotAndDotDot);

setFilter:是个过虑器可以根据自己的设置过虑出(呈现出)你想要的“model”。看下面

QStringList list_name;
list_name<<"*.jpg"<<"*.gif"<<"*.png";
model->setNameFilters(list_name);

setNameFilers:跟setFiler的作用相似,可以根据字符串呈现。这句话作用是只显示,.jpg  .gif  .png格式的图片。
还有一句很重要的话

ui->listView->setRootIndex(model->setRootPath("/mnt/xuechao/src"));

使listView显示指定的目录文件。

下面是源码:

#include "widget.h"
#include "ui_widget.h"
#include <QVBoxLayout>
#include <QFileSystemModel>
#include <QListView>
#include <QDirModel>
#include <QDebug>
#include <QModelIndex>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

       QFileSystemModel* model= new QFileSystemModel();
       model->setNameFilterDisables(false);
       model->setFilter(QDir::Dirs|QDir::Drives|QDir::Files|QDir::NoDotAndDotDot);
       QStringList list_name;
       list_name<<"*.jpg"<<"*.gif"<<"*.png";
       model->setNameFilters(list_name);
       //model->setRootPath("/home/public/xuechao/src");
       ui->listView->setMovement(QListView::Static);
       ui->listView->setViewMode(QListView::IconMode);
       ui->listView->setGridSize(QSize(80,80));
       ui->listView->setModel(model);
       ui->listView->setRootIndex(model->setRootPath("/mnt/xuechao/src"));
       connect(ui->listView,SIGNAL(clicked(QModelIndex)),this,SLOT(pictureShow(QModelIndex)));
}
void Widget::pictureShow(const QModelIndex &index)
{
    qDebug("clicked");

        QString filepath = index.data(Qt::DisplayRole).toString();
        QStringList str;
        str.clear();
        //str.append("/mnt/yaffs/");
        str.append("/mnt/xuechao/src/");
        str.append(filepath);
        filepath = str.join("");
        qDebug() << "filepath" << filepath;
        str.clear();
        ui->label->setPixmap(QPixmap(filepath));
        ui->label->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
       // QVBoxLayout *layout;
        //layout= new QVBoxLayout(ui->label);
}


Widget::~Widget()
{
    delete ui;
}

 

posted @ 2012-10-17 19:27  onlycxue  阅读(4605)  评论(0编辑  收藏  举报