Model/View——(二)QFileSystemModel

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));
}
03-19
### QT框架中的MVCS模式 #### MVCS架构概述 在QT框架中,MVCS(Model-View-Controller-State Machine)是一种扩展的MVC设计模式[^3]。它不仅包含了传统的模型(Model)、视图(View)和控制器(Controller),还引入了状态机(State Machine)的概念来管理复杂的应用程序逻辑。 #### Model部分详解 `QFileSystemModel` 是一个典型的例子,用于表示文件系统的数据结构。通过创建 `QFileSystemModel` 的实例并设置其根路径,可以获取当前目录下的项目数量以及子项索引等信息[^2]。 ```cpp QFileSystemModel *model = new QFileSystemModel; QModelIndex parentIndex = model->index(QDir::currentPath()); int numRows = model->rowCount(parentIndex); ``` #### View部分详解 视图负责展示由模型提供的数据给用户,并允许用户交互操作这些数据显示的内容。例如,在使用 `QTreeView` 或者其他类似的控件时,可以通过绑定到上述提到的数据模型上来自动生成界面显示效果[^4]。 #### Controller部分详解 控制器充当着连接模型与视图之间的桥梁角色;当接收到用户的输入事件后会通知相应的业务处理函数去更新后台数据库或者改变前端UI呈现形式等等动作响应机制的设计思路均属于此范畴之内[^5]。 #### State Machine(状态机) 为了更好地支持动态变化的需求场景下保持良好的用户体验度量标准不变的同时提高开发效率降低维护成本等方面考虑加入了一套完整的有限自动转换规则体系即所谓的“状态转移网络”。这使得整个软件系统能够更加灵活地应对各种可能发生的异常情况而不会轻易崩溃退出运行环境之外还能有效减少冗余代码重复编写次数从而达到优化性能的目的[^6]。 #### 实现方式总结 综上所述,在实际应用过程中如果想要基于QT库快速搭建起一套功能完善的桌面应用程序的话,则需要综合运用以上四个核心组件相互配合才能完成最终目标——既满足基本的功能需求又要兼顾美观大方简洁明快的操作流程体验感!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值