模型(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    不能选择项
SingleSelection 1 只能选择一项,选中项与当前项为同一项,可以通过Ctrl+Click取消选择
MultiSelection 2  选中一项时,该项的选择状态将被改变,不影响其他项。可通过拖动鼠标选择多项
ExtendedSelection 3  正常选择时,一次选择一项。Ctrl+Click可以改变选中项的选择状态而不影响其他项的选择状态,Shift+Click可以根据选中项的状态决定选中项和当前项间所有项的状态。可以通过拖动鼠标选择多项
ContiguousSelection 4

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

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

#include "mainwindow.h"

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
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();
}

结果:

模型(Model)/视图(View)结构之目录浏览器_第1张图片

 

你可能感兴趣的:(数据库,qt)