【QT】QFileSystemModel类的应用介绍

2023-12-20 15:52

本文主要是介绍【QT】QFileSystemModel类的应用介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

 1 QFileSystemModel类介绍

1.1 属性

1.2 信号

1.3 函数

2 QFileSystemModel类的基本功能

3 QFileSystemModel的使用

4 QFileSystemModel应用程序示例

 1 QFileSystemModel类介绍

1.1 属性

  • nameFilterDisables : bool 此属性保存未通过名称筛选器的文件是隐藏还是禁用,默认值为true
  • options : options 此属性包含影响模型的各种选项,默认情况下,所有选项均为disabled
  • readOnly : bool 此属性保存目录模型是否允许写入文件系统,默认情况下为true
  • resolveSymlinks : bool 此属性保存目录模型是否应解析符号链接,默认情况下为true
信号

1.2 信号

1.3 函数

2 QFileSystemModel类的基本功能

QFileSystemModel提供了一个可用于访问本机文件系统的数据模型。QFileSystemModel和视 图组件QTreeView结合使用,可以用目录树的形式显示本机上的文件系统,如同Widnows的资源 管理器一样。使用QFileSystemModeI提供的接口函数,可以创建目录、删除目录、重命名目录, 可以获得文件名称、目录名称、文件大小等参数,还可以获得文件的详细信息。
要通过QFileSystemModel获得本机的文件系统,需要用setRootPath()函QFileSystemModel
设置一个根目录,例如:
QFileSystemModel *model = new QFileSystemModel;
model->setRootPath(QDir::currentPath());//静态函数QDir::currentPath()获取应用程序的当前路径。
用于获取磁盘文件目录的数据模型类还有一个QDirModel,QDirModel的功能与QFileSystemModel 类似,也可以获取目录和文件,但是QFileSystemModel采用单独的线程获取目录文件结构,而QDirModel 不使用单独的线程。使用单独的线程就不会阻碍主线程,所以推荐使用QFileSystemModel。
使用QFileSystemModel作为数据模型,QTreeView、QListView和QTableView为主要组件设
计的实例samp5-1运行界面如图5-6所示。在TreeView中以目录树的形式显示本机的文件系统, 单击一个目录时,右边的ListView和TableView显示该目录下的目录和文件。在TreeView上单击 一个目录或文件节点时,下方的几个标签里显示当前节点的信息。

3 QFileSystemModel的使用

实例samp5_1的主窗囗是基于QMainWindow的,在使用UI设计器做可视化设计时删除了工具栏和状态栏。主窗口界面布局采用了两个分割条的设计,ListView和TableView采用上下分割布 局,然后和左边的TreeView采用水平分割布局,水平分割布局再和下方显示信息的groupBox在 主窗口工作区水平布局。
在主窗口类中定义了一个QFileSystemModel类的成员变量model。
QFileSystemModel  *model;
主窗口构造函数进行初始化,代码如下:
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);//    setCentralWidget(ui->splitterMain);  //设置主布局,填充满窗口//    model=new QDirModel(this);//QDirModel无单独线程model=new QFileSystemModel(this); //QFileSystemModel提供单独线程,推荐使用model->setRootPath(QDir::currentPath()); //设置根目录ui->treeView->setModel(model); //设置数据模型ui->listView->setModel(model); //设置数据模型ui->tableView->setModel(model); //设置数据模型
//信号与槽关联,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)));
}
3个视图组件都使用setModel()函数,将QFileSystemModeI数据模型model设置为自己的数 据模型。
connect()函数设置信号与槽的关联,实现的功能是:在单击treeView的一个节点时,此节点 就设置为listView和tableView的根节点,因为treeView的clicked(QModelIndex)信号会传递一个 QModelIndex变量,是当前节点的模型索引,将此模型索引传递给和tableView的槽函数
setRootIndex(QModelIndex),listView和tableView就会显示此节点下的目录和文件。
在treeView上单击一个节点时,下方的一些标签里会显示节点的一些信息,这是为treeView
的clicked(constQModelIndex &index)信号编写槽函数实现的,其代码如下:
void MainWindow::on_treeView_clicked(const QModelIndex &index)
{ui->chkIsDir->setChecked(model->isDir(index));ui->LabPath->setText(model->filePath(index));ui->LabType->setText(model->type(index));ui->LabFileName->setText(model->fileName(index));int sz=model->size(index)/1024;if (sz<1024)ui->LabFileSize->setText(QString("%1 KB").arg(sz));elseui->LabFileSize->setText(QString::asprintf("%.1f MB",sz/1024.0));
}
函数有一个传递参数QModelIndex  &index,它是单击节点在数据模型中的索引。通过传递来的模型
索引index,这段代码使用了QFileSystemModel的一些函数来获得节点的一些参数,包括以下几种。
  • bool  isDir(QModelIndex  &index):判断节点是不是一个目录。
  • QString  filePath(QModelIndex  &index):返回节点的目录名或带路径的文件名。
  • QString  fileName(QModelIndex  &index):返回去除路径的文件夹名称或文件名。
  • QString  type(QModelIndex  &index):返回描述节点类型的文字,如硬盘符是“Drive”,文
件夹是"FileFolder”,文件则用具体的后缀描述,如"txtFile""exeFile”"pdfFile"等。
  • qint64  size(QModelIndex  &index):如果节点是文件,返回文件大小的字节数:如果节点是文件夹,返回 0。
而QFileSystemModel是如何获取磁盘目录文件结构的,3个视图组件是如何显示这些数据的, 则是其底层实现的问题了。

4 QFileSystemModel应用程序示例

(1)main.cpp文件
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}
(2)mainwindow.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
//#include    <QDirModel>
#include    <QFileSystemModel>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECT
private:
//    QDirModel    *model;QFileSystemModel    *model; //定义数据模型变量public:explicit MainWindow(QWidget *parent = 0);~MainWindow();private slots:
//    void on_treeView_doubleClicked(const QModelIndex &index);void on_treeView_clicked(const QModelIndex &index);private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H
(3) mainwindow .cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);
//    setCentralWidget(ui->splitterMain);  //设置主布局,填充满窗口//    model=new QDirModel(this);//QDirModel无单独线程model=new QFileSystemModel(this); //QFileSystemModel提供单独线程,推荐使用model->setRootPath(QDir::currentPath()); //设置根目录ui->treeView->setModel(model); //设置数据模型ui->listView->setModel(model); //设置数据模型ui->tableView->setModel(model); //设置数据模型//信号与槽关联,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)));
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_treeView_clicked(const QModelIndex &index)
{ui->chkIsDir->setChecked(model->isDir(index));ui->LabPath->setText(model->filePath(index));ui->LabType->setText(model->type(index));ui->LabFileName->setText(model->fileName(index));int sz=model->size(index)/1024;if (sz<1024)ui->LabFileSize->setText(QString("%1 KB").arg(sz));elseui->LabFileSize->setText(QString::asprintf("%.1f MB",sz/1024.0));
}
(4) mainwindow .ui文件

这篇关于【QT】QFileSystemModel类的应用介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/516591

相关文章

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

Python循环缓冲区的应用详解

《Python循环缓冲区的应用详解》循环缓冲区是一个线性缓冲区,逻辑上被视为一个循环的结构,本文主要为大家介绍了Python中循环缓冲区的相关应用,有兴趣的小伙伴可以了解一下... 目录什么是循环缓冲区循环缓冲区的结构python中的循环缓冲区实现运行循环缓冲区循环缓冲区的优势应用案例Python中的实现库

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir