QFileSystemModel


关于这个类

QFileSystemModelQAbstractItermModel 的子类,是一个抽象类。它是封装好的纯虚函数,同时也是模版类,实例化后的对象,可以用于访问本机文件系统。

搭档

QFileSystemModel 的一个优势是采用单独线程,不会阻碍主线程。作为 Model/View 的结构中的 Model,它可与 QTreeViewQListView,QTableView 组合使用。

用法示例

QFileSystemModel *model = new QFileSystemModel;
model->setRootPath(QDir::currentPath());

setRootPath() 接受一个地址,作为该 Model 类的根目录。QDir::currentPath() 返回应用程序当前的路径。

代码

  • mywidget.cpp
#include "mywidget.h"
#include "./ui_mywidget.h"

myWidget::myWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::myWidget)
{
    ui->setupUi(this);
    model=new QFileSystemModel(this);
    model->setRootPath(QDir::currentPath());//根目录初始化为当前程序所在目录
    ui->treeView->setModel(model);//ModelView 结构关联
    ui->listView->setModel(model);//ModelView 结构关联
    ui->tableView->setModel(model);//ModelView 结构关联

    //信号与槽设置
    connect(ui->treeView,&QTreeView::clicked,
            ui->listView,&QListView::setRootIndex);
    connect(ui->treeView,&QTreeView::clicked,
            ui->tableView,&QTableView::setRootIndex);

    connect(ui->treeView,&QTreeView::clicked,
       this,&myWidget::treeViewclickedslot);


};

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


void myWidget::treeViewclickedslot(const QModelIndex &index){
    ui->chkIsDir->setChecked(model->isDir(index));
    ui->labelPath->setText(model->filePath(index));
    ui->labelFileType->setText(model->type(index));
    ui->labelFileName->setText(model->fileName(index));
    int sz=model->size(index)/1024;
    if(sz<1024)
        ui->labelFileSize->setText(QString("%1 KB").arg(sz));
    else
        ui->labelFileSize->setText(QString::asprintf("%.1f MB",sz/1024.0));
};
  • mywidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include <QFileSystemModel>

QT_BEGIN_NAMESPACE
namespace Ui { class myWidget; }
QT_END_NAMESPACE

class myWidget : public QWidget
{
    Q_OBJECT
public:
    myWidget(QWidget *parent = nullptr);
    ~myWidget();
private:
    QFileSystemModel *model; //创建指针,指向 model
private slots:
    void treeViewclickedslot(const QModelIndex &index);
private:
    Ui::myWidget *ui;
};
#endif // MYWIDGET_H

运行结果

sample51.png


文章作者: 五笔小筑
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 五笔小筑 !
评论