模型Model:文件系统模型QFileSystemModel

一、

1、常用函数

QFileSystemModel自带目录变化监听
1)、 QModelIndex setRootPath(const QString &path); 设置检索根目录
2)、 bool isDir(const QModelIndex &index) const; 选中索引是否为目录节点
3)、 QString filePath(const QModelIndex &index) const; 选中索引路径
4)、 QString type(const QModelIndex &index) const; 选中索引文件类型
5)、 inline QString fileName(const QModelIndex &index) const; 选中索引文件名称
6)、 qint64 size(const QModelIndex &index) const; 选中索引文件大小

7)、 QModelIndex mkdir(const QModelIndex &parent, const QString &name)
在父模型索引 parent 中创建一个名称为 name 的目录。
8)、 bool rmdir(const QModelIndex &index)
移除并删除文件系统模型中索引 index 所对应的目录。若删除成功则返回 true,否则
返回 false。注意:该函数并不会把目录放置于可以恢复的位置(比如回收站),而是直
接删除。
9)、 bool remove(const QModelIndex &index)
从文件系统模型中移除模型索引 index,并删除对应的文件,若删除成功,则返回 true,
否则返回 false。注意:该函数并不会把文件放置于可以恢复的位置(比如回收站),而
是直接删除。
 

10)、QModelIndex index(const QString &path, int column = 0) const
返回给定路径 path 和列 column 的项目的模型索引
11)、 void setFilter(QDir::Filters filters)
QDir::Filters filter() const
以上函数表示设置和返回目录模型的过滤器, 设置的过滤器应始终包含 QDir::AllDirs,
否则 QFileSystemModel 将无法读取目录结构。 若未设置过滤器,则默认过滤器是
QDir::AllEntries|QDir::NoDotAndDotDot | QDir::AllDirs,即列出目录、文件、驱动器、
符号连接,且不列出特殊条目“…”, QDir::Filter 枚举参见 QDir 类。
12)、 void setNameFilters(const QStringList &filters)
QStringList nameFilters() const
以上函数用于设置和返回模型的名称过滤器列表。 此处的名称过滤器的设置方法与第
6 章文件对话框章节的有些不同,规则如下
过滤器使用字符串列表的形式指定,一次只能指定一种类型,且不支持 MIME 类型,

2、举例

模型Model:文件系统模型QFileSystemModel_第1张图片

#include "mainwindow.h"
#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    model=new QFileSystemModel(this); //QFileSystemModel提供单独线程,推荐使用
    model->setRootPath(QDir::currentPath()); //设置根目录

    ui->treeView->setModel(model); //设置树视图 数据模型
    ui->listView->setModel(model); //设置列表视图 数据模型
    ui->tableView->setModel(model); //设置表格视图 数据模型

//信号与槽关联,treeView单击时,其目录设置为listView和tableView的根节点
    connect(ui->treeView,SIGNAL(clicked(QModelIndex)),
            ui->listView,SLOT(setRootIndex(QModelIndex)));

    connect(ui->treeView,SIGNAL(clicked(QModelIndex)),
            ui->tableView,SLOT(setRootIndex(QModelIndex)));
}

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

void MainWindow::on_treeView_clicked(const QModelIndex &index)
{
    ui->chkIsDir->setChecked(model->isDir(index));//节点是目录
    ui->LabPath->setText(model->filePath(index));//节点路径
    ui->LabType->setText(model->type(index));//节点类型

    ui->LabFileName->setText(model->fileName(index));//文件名

    int sz=model->size(index)/1024;//文件大小
    if (sz<1024)
        ui->LabFileSize->setText(QString("%1 KB").arg(sz));//文件大小
    else
        ui->LabFileSize->setText(QString::asprintf("%.1f MB",sz/1024.0));
}

2.1、模型索引ModelIndex 和 文件路径path的联系??

可以通过QFileSystemModel::index()函数,获取“给定路径path的文件系统模型的 模型索引!!

QFileSystemModel  d;

QModelIndex m = d->index(“path”);//给定路径path”的模型索引m

2.2、treeView的当前目录,是如何传递给setRootIndex函数的?

Clicked(QModelIndex)信号,会传递一个QModelIndex变量,是当前节点的 模型索引。

比如,这个QModelIndex变量d创建时候是d->index(“path”)这个根目录。那么就会将这个模型索引d,传递给listView和tableView的槽函数setRootIndex(d)。

listView和tableView就会显示此节点下的目录和文件。

二、

你可能感兴趣的:(#,模型\视图\委托(自定义代理),qt,开发语言)