模型(Model)/视图(View)结构之目录浏览器

目录浏览器

QDirModel 是 Qt 中用于展示文件系统目录结构的模型类。它继承自 QAbstractItemModel,用于提供数据和操作接口,以便在视图组件(如 QTreeView、QListView)中显示文件系统的目录结构。

QDirModel 提供了以下功能和特性:

  1. 展示目录结构:QDirModel 可以展示文件系统的目录结构,包括文件夹和文件。它以树形结构的形式呈现,每个节点代表一个文件夹或文件。
  2. 自动刷新:QDirModel 支持自动刷新,可以监测文件系统的变化,并自动更新模型中的数据。例如,当文件或文件夹被创建、删除或重命名时,QDirModel 会及时反映这些变化。
  3. 排序和过滤:QDirModel 可以根据文件名进行排序,并支持根据文件类型或其他属性进行过滤。这样,您可以根据需要定制显示的文件和文件夹。
  4. 数据获取:QDirModel 提供了获取文件和文件夹的相关信息的接口。您可以通过模型索引获取文件名、路径、文件大小、修改时间等信息。
  5. 文件操作:QDirModel 支持文件操作,如复制、移动、删除文件和文件夹。通过 QFileSystemModel 的接口,您可以方便地对文件系统进行操作。

以下是 QDirModel 的一些常用方法和函数:

  • rowCount(): 返回指定父节点下的行数。
  • columnCount(): 返回模型的列数。
  • index(): 返回指定行、列和父节点的模型索引。
  • parent(): 返回给定模型索引的父节点索引。
  • data(): 返回模型索引的数据,如文件名、文件路径等。
  • flags(): 返回模型索引的标志,用于指定索引的可用操作。
  • setData(): 设置模型索引的数据,如修改文件名等。
  • mkdir(): 创建一个新文件夹。
  • remove(): 删除指定文件或文件夹。

用于获取磁盘文件目录的数据模型类还有QFileSystemModel,但是QFileSystemModel采用单独的线程获取目录文件结构,QDirModel不使用单独的线程。使用单独的线程就不会阻碍主线程,所以推荐使用QFileSystemModel。

(QDirModel属于Qt自带的model,通过先了解model的用法,以及数据如何存取。然后再学习自定义model,自定义model用法和QDirModel是一样的。只不过QDirModel提供了文件系统标准的数据,所以Qt给提供为标准模块了。而我们自定义model数据样式繁多,所以需要我们自己实现。)

SelectionMode继承自QAbstractionView类,该类是所有使用了QAbstractItemModel的标准视图的基本类,从它名字就可以看出,它是一个抽象类(自身不能被实例化),通过信号与槽机制为其与模式之间的相互操作提供一个标准接口,使子类能根据模式的变化保持最新。

类型           值     描述
NoSelection                   0   不能选择项
SingleSelection1只能选择一项,选中项与当前项为同一项,可以通过Ctrl+Click取消选择
MultiSelection2 选中一项时,该项的选择状态将被改变,不影响其他项。可通过拖动鼠标选择多项
ExtendedSelection3 正常选择时,一次选择一项。Ctrl+Click可以改变选中项的选择状态而不影响其他项的选择状态,Shift+Click可以根据选中项的状态决定选中项和当前项间所有项的状态。可以通过拖动鼠标选择多项
ContiguousSelection4

正常选择时,一次选中一项。当结合Shift+Click选中某项时,选中项和当前项(即上一次的选中项)间的所有项将同时被选中或取消,这取决于选中项的状态

原文链接:https://blog.csdn.net/fjunchao/article/details/117551577

#include "mainwindow.h"#include <QApplication>
#include <QAbstractItemModel>
#include <QAbstractItemView>
#include <QItemSelectionModel>
#include <QDirModel>
#include <QTreeView>
#include <QListView>
#include <QTableView>
#include <QSplitter>
int main(int argc, char *argv[])
{QApplication a(argc, argv);QDirModel model;//新建三种不同的view对象,以便文件目录可以以三种不同的方式显示QTreeView tree;QListView list;QTableView  table;tree.setModel(&model);list.setModel(&model);table.setModel(&model);tree.setSelectionMode(QAbstractItemView::MultiSelection);tree.setSelectionModel(tree.selectionModel());tree.setSelectionModel(tree.selectionModel());QObject::connect(&tree,SIGNAL(doubleClicked(QModelIndex)),&list,SLOT(setRootIndex(QModelINdex)));QObject::connect(&tree,SIGNAL(doubleClicked(QModelIndex)),&table,SLOT(setRootIndex(QModelINdex)));QSplitter *splitter=new QSplitter;splitter->addWidget(&tree);splitter->addWidget(&list);splitter->addWidget(&table);splitter->setWindowTitle(QObject::tr("Model/View"));splitter->show();MainWindow w;//w.show();return a.exec();
}

结果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/76367.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSRF

CSRF CSRF&#xff0c;跨站域请求伪造&#xff0c;通常攻击者会伪造一个场景&#xff08;例如一条链接&#xff09;&#xff0c;来诱使用户点击&#xff0c;用户一旦点击&#xff0c;黑客的攻击目的也就达到了&#xff0c;他可以盗用你的身份&#xff0c;以你的名义发送恶意请…

微软Win11 Dev预览版Build23526发布

近日&#xff0c;微软Win11 Dev预览版Build23526发布&#xff0c;修复了不少问题。牛比如斯Microsoft&#xff0c;也有这么多bug&#xff0c;所以你写再多bug也不作为奇啊。 主要更新问题 [开始菜单&#xff3d; 修复了在高对比度主题下&#xff0c;打开开始菜单中的“所有应…

远程真机测试为什么需要应用性能指标监控?

我们在使用app、小程序等手机应用的时候&#xff0c;经常会发生“卡死“等现象。”卡死“会让用户认为你的app不可信&#xff0c;从而引发删除等情况。我们辛辛苦苦、花费大量精力和费用推广的app就失败了。 因此&#xff0c;我们就需要知道&#xff0c;app在使用时候&#…

计算机网络-物理层(三)-信道的极限容量

计算机网络-物理层(三)-信道的极限容量 当信号在信道中传输失真不严重时&#xff0c;在信道的输出端&#xff0c;这些信号可以被识别 当信号在信道中&#xff0c;传输失真严重时&#xff0c;在信道的输出端就难以识别 造成失真的因素 码元传输速率信号传输距离噪声干扰传输媒…

测试框架pytest教程(4)运行测试

运行测试文件 $ pytest -q test_example.py 会运行该文件内test_开头的测试方法 该-q/--quiet标志使输出保持简短 测试类 pytest的测试用例可以不写在类中&#xff0c;但如果写在类中&#xff0c;类名需要是Test开头&#xff0c;非Test开头的类下的test_方法不会被搜集为用…

K8s实战4-使用Helm在Azure上部署Ingress-Nginx和Tokengateway

手动发布Ingress-Nginx 1 登录到aks(dfinder-gw-aks) az login az account set --subscription ${sub ID} az aks get-credentials --resource-group ${groupname} --name ${aks name} 2 下载 ingress-nginx-4.2.5.tgz curl -LO https://github.com/kubernetes/ingress-ngi…

电商项目part04 微服务拆分

微服务架构拆分 微服务介绍 英文:https://martinfowler.com/articles/microservices.html 中文:http://blog.cuicc.com/blog/2015/07/22/microservices 微服务拆分时机 如下场景是否需要进行微服务拆分&#xff1f; 代码维护困难&#xff0c;几百人同时开发一个模块&…

怎么压缩视频?一分钟学会视频压缩技巧

现在拍摄的视频文件体积都比较大&#xff0c;如果再加上后期的剪辑处理&#xff0c;动不动就是几个GB起步&#xff0c;这样一来不仅占用空间&#xff0c;还不方便传输&#xff0c;今天就围绕这个问题给大家分享几个压缩视频的方法&#xff0c;需要的朋友可以参考下。 方法一&am…

视频云存储/安防监控/视频汇聚EasyCVR平台新增设备经纬度选取

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

分布式链路追踪——Dapper, a Large-Scale Distributed Systems Tracing Infrastructure

要解决的问题 如何记录请求经过多个分布式服务的信息&#xff0c;以便分析问题所在&#xff1f;如何保证这些信息得到完整的追踪&#xff1f;如何尽可能不影响服务性能&#xff1f; 追踪 当用户请求到达前端A&#xff0c;将会发送rpc请求给中间层B、C&#xff1b;B可以立刻作…

vue3 基础知识

vue3创建一个项目 PS D:\code> npm init vuelatestVue.js - The Progressive JavaScript Framework√ Add TypeScript? ... No / Yes √ Add JSX Support? ... No / Yes √ Add Vue Router for Single Page Application development? ... No / Yes √ Add Pinia for sta…

Echarts、js编写“中国主要城市空气质量对比”散点图 【亲测】

本次实验通过可视化工具Echarts来对全国主要城市的&#xff30;&#xff2d;2.5的值进行直观的展示&#xff0c;使人们可以快速的发现信息的关键点&#xff0c;从而对各个城市的空气质量情况有直观的了解。 先看效果 上代码&#xff1a; <!DOCTYPE html> <html>&…