用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; }