QFileSystemModel
QFileSystemModel类的基本功能
QFileSystemModel提供了一个可用于访问本机文件系统的数据模型。QFileSystemModel和视图QTreeView结合使用,可以用目录树的形式显示本机上的文件系统,如同Windows的资源管理器一样。
使用QFileSystemModel提供的接口函数,可以创建目录、删除目录、重命名目录,可以获得文件名称、目录名称、文件大小等参数,还可以获得文件的详细信息。
要通过QFileSystemModel获得本机的文件系统,需要用setRootPath()函数为QFileSystemModel设置一个根目录
QFileSystemModel *model = new QFileSystemModel;
model->setRootPath(QDir::currentPath());//静态函数QDir::currentPath()获取应用程序的当前路径
其他:用于获取磁盘文件目录的数据模型还有一个QDirModel,QDirModel的功能与QFileSystemModel类似,以可以获取目录和文件,但是QFileSystemModel采用单独的线程获取目录文件结构,不会阻碍主线程,而QDirModel不使用单独的线程。
QFileSystemModel的使用与实例
UI布局
代码部分
//mainwindow.h
private:
QFileSystemModel *model;
//mainwindow.cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
model = new QFileSystemModel(this);
model->setRootPath(QDir::currentPath()); //设置根目录
ui->treeView->setModel(model);//设置数据模型
ui->listView->setModel(model);
ui->tableView->setModel(model);
ui->tableView->verticalHeader()->setVisible(false);
//信号与槽关联,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)));
}
void MainWindow::on_treeView_clicked(const QModelIndex &index)
{
ui->chk_isDir->setChecked(model->isDir(index));
ui->lab_FilePath->setText(model->filePath(index));
ui->lab_FileName->setText(model->fileName(index));
ui->lab_FileType->setText(model->type(index));
int sz = model->size(index)/1024;
if(sz < 1024)
ui->lab_FileSize->setText(QString("%1 kB").arg(sz));
else
ui->lab_FileSize->setText(QString::asprintf("%.lf MB",sz/1024.0));
}