QFileSystemModel类和QStringListModel类

news2024/9/28 23:38:43

QFileSystemModel介绍

QFileSystemModel是Qt框架中的一个模型类,用于在Qt应用程序中表示本地文件系统的目录结构。它提供了一种方便的方式来访问和操作文件系统中的文件和目录。下面是对QFileSystemModel的详细介绍:

  1. 目录结构的表示:QFileSystemModel以树状结构表示文件系统的目录和子目录。根目录是文件系统的顶层目录,每个目录下有相应的子目录和文件。通过使用QFileSystemModel,可以轻松获取目录和文件的名称、路径、大小和属性等信息。

  2. 数据模型的使用:QFileSystemModel是基于Qt的数据模型体系结构的,因此可以与Qt的视图类(如QTreeView)结合使用,以显示文件系统的目录结构。通过将QFileSystemModel设置为视图的模型,可以实现文件系统的浏览和导航。

  3. 模型索引的使用:QFileSystemModel使用模型索引(QModelIndex)来标识文件系统中的特定目录或文件。模型索引包含了与具体项相关的信息,比如行数、列数、父子关系等。通过使用模型索引,可以方便地进行文件和目录的访问、查找和操作。

  4. 数据更新和通知:当文件系统发生变化时(如创建、删除、重命名文件或目录),QFileSystemModel会自动检测到这些变化,并及时更新模型的数据。在数据更新后,QFileSystemModel会发送信号通知相关视图进行刷新,以反映文件系统的最新状态。

  5. 排序和过滤:QFileSystemModel支持对文件系统中的目录和文件进行排序和过滤。可以根据文件名、大小、修改日期等属性进行排序,也可以根据特定的过滤规则隐藏某些文件或目录。

总之,QFileSystemModel提供了一种方便的方式来访问和管理本地文件系统,使开发人员能够快速构建功能强大的文件浏览器、文件选择器等应用程序。通过使用QFileSystemModel,可以轻松处理文件系统中的目录结构,并实现与文件和目录相关的操作。

QFileSystemModel接口

QFileSystemModel类提供了许多接口(函数和信号),用于管理和操作文件系统的目录结构。下面是对一些主要接口的详细介绍:

  1. 构造函数:

    • QFileSystemModel(QObject *parent = nullptr):构造一个QFileSystemModel对象。可以通过传递父对象来管理对象的生命周期。
  2. 设置和获取根路径:

    • setRootPath(const QString &path):设置根路径为指定的path。
    • rootPath() const:返回当前设置的根路径。
  3. 文件和目录的基本信息获取:

    • fileName(const QModelIndex &index) const:返回给定索引指向的文件或目录的名称。
    • filePath(const QModelIndex &index) const:返回给定索引指向的文件或目录的完整路径。
    • isDir(const QModelIndex &index) const:判断给定索引是否为目录。
    • fileInfo(const QModelIndex &index) const:返回给定索引指向的文件或目录的QFileInfo对象,包含了更详细的信息,如文件大小、创建时间等。
  4. 获取索引:

    • index(int row, int column, const QModelIndex &parent = QModelIndex()) const:返回指定行和列在给定父索引下的模型索引。
    • parent(const QModelIndex &child) const:返回给定子索引的父索引。
  5. 排序和过滤:

    • sort(int column, Qt::SortOrder order = Qt::AscendingOrder):按照指定的列和排序顺序对模型的数据进行排序。
    • filter() const:返回当前设置的过滤器。
    • setFilter(QDir::Filters filters):设置过滤器,用于隐藏某些文件或目录。
  6. 信号:

    • directoryLoaded(const QString &path):当指定路径的目录加载完成时发出信号。
    • fileRenamed(const QString &path, const QString &oldName, const QString &newName):当文件重命名时发出信号。
    • rootPathChanged(const QString &newPath):当根路径改变时发出信号。
  7. 其他:

    • rowCount(const QModelIndex &parent = QModelIndex()) const:返回给定父索引下的子项数目,或者根据没有父索引的情况返回根项的数目。
    • columnCount(const QModelIndex &parent = QModelIndex()) const:返回给定父索引的列数。

上述是一些QFileSystemModel类的常用接口,通过使用这些接口,可以方便地获取文件和目录的信息、操作文件系统的目录结构,并与视图类结合实现功能强大的文件浏览和管理应用程序。

QStringListModel介绍

QStringListModel是Qt框架中的一个模型类,用于在Qt应用程序中表示一维字符串列表。它提供了一种方便的方式来管理和操作字符串数据,可以配合Qt的视图类(如QListView、QComboBox等)使用。

下面是对QStringListModel的详细介绍:

  1. 数据存储:QStringListModel将字符串列表作为其数据存储。列表中的每个项都是一个字符串。可以通过设置字符串列表来初始化QStringListModel的数据,也可以在运行时动态添加、删除或修改列表中的项。

  2. 数据模型的使用:QStringListModel是基于Qt的数据模型体系结构的,因此可以与Qt的视图类(如QListView、QComboBox)结合使用。通过将QStringListModel设置为视图的模型,可以实现字符串的展示、选择和编辑等功能。

  3. 数据更新和通知:当字符串列表发生变化时,例如添加、删除、修改了列表的项,QStringListModel会自动检测到这些变化,并及时更新模型的数据。在数据更新后,QStringListModel会发送信号通知相关视图进行刷新,以反映最新的字符串列表。

  4. 数据访问:通过QStringListModel,可以方便地访问列表中的字符串数据。可以使用index()函数获取指定行和列的模型索引,并通过data()函数获取索引位置的字符串数据。

  5. 数据操作:QStringListModel提供了一些函数来方便地操作字符串列表,例如添加、删除、插入和修改列表中的项。可以使用insertRows()、removeRows()和setData()等函数对列表进行修改。

总之,QStringListModel是一个方便且灵活的模型类,用于在Qt应用程序中管理和操作字符串列表数据。通过使用QStringListModel,可以轻松地展示、编辑和选择字符串数据,并与相应的视图类结合实现所需的功能。

QStringListModel接口

QStringListModel类提供了许多接口(函数和信号),用于管理和操作字符串列表的数据。下面是对一些主要接口的详细介绍:

  1. 构造函数:

    • QStringListModel(QObject *parent = nullptr):构造一个QStringListModel对象。可以通过传递父对象来管理对象的生命周期。
  2. 数据操作:

    • setStringList(const QStringList &strings):设置模型的字符串列表为指定的strings。
    • stringList() const:返回当前设置的字符串列表。
    • insertRows(int row, int count, const QModelIndex &parent = QModelIndex()):在指定行处插入count个空白行。
    • removeRows(int row, int count, const QModelIndex &parent = QModelIndex()):从指定行开始删除count行。
    • setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole):将指定索引位置的数据设置为value,并使用role来标识数据的角色。
  3. 数据访问:

    • index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const:返回指定行和列在给定父索引下的模型索引。
    • data(const QModelIndex &index, int role = Qt::DisplayRole) const:返回给定索引处的数据,可以使用role来指定要获取的数据的角色。
    • flags(const QModelIndex &index) const:返回给定索引处的数据的标志,用于指示数据的属性,如是否可编辑、是否可选择等。
    • rowCount(const QModelIndex &parent = QModelIndex()) const:返回给定父索引下的子项数目,或者根据没有父索引的情况返回模型中的行数。
    • columnCount(const QModelIndex &parent = QModelIndex()) const:返回给定父索引的列数,默认为1列。
  4. 信号:

    • dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = QVector<int>()):当数据发生变化时发出信号,通知相关视图刷新界面。
  5. 其他:

    • insertRow(int row, const QModelIndex &parent = QModelIndex()):在指定行处插入一行。
    • removeRow(int row, const QModelIndex &parent = QModelIndex()):删除指定行。
    • headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const:返回指定部分(行或列)的标题数据,可用于表头显示。
    • setDataList(const QStringList &strings):设置模型的字符串列表为指定的strings(与setStringList()功能相同)。
    • dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent):接受从其他应用程序拖放的数据。

上述是一些QStringListModel类的常用接口,通过使用这些接口,可以方便地操作和管理字符串列表的数据,并与视图类结合实现各种功能。

代码演示

#include <QApplication>
#include <QMainWindow>
#include <QFileSystemModel>
#include <QTreeView>
#include <QListView>
#include <QTableView>
#include <QModelIndex>
#include <QDir>
#include <QLabel>
#include <QCheckBox>
#include <QVBoxLayout>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QMainWindow mainWindow;
    QFileSystemModel model(&mainWindow); // Create QFileSystemModel with parent as mainWindow
    model.setRootPath(QDir::currentPath()); // Set root path to current directory

    QTreeView treeView(&mainWindow); // Create QTreeView
    treeView.setModel(&model); // Set QFileSystemModel as data model for treeView

    QListView listView(&mainWindow); // Create QListView
    listView.setModel(&model); // Set QFileSystemModel as data model for listView

    QTableView tableView(&mainWindow); // Create QTableView
    tableView.setModel(&model); // Set QFileSystemModel as data model for tableView

    QObject::connect(&treeView, &QTreeView::clicked, &listView, &QListView::setRootIndex);
    QObject::connect(&treeView, &QTreeView::clicked, &tableView, &QTableView::setRootIndex);

    QWidget *centralWidget = new QWidget(&mainWindow); // Create central widget
    QVBoxLayout *layout = new QVBoxLayout(centralWidget); // Create layout for central widget
    layout->addWidget(&treeView); // Add treeView to layout
    layout->addWidget(&listView); // Add listView to layout
    layout->addWidget(&tableView); // Add tableView to layout

    QLabel labelPath(&mainWindow); // Create QLabel to display selected item's path
    QLabel labelType(&mainWindow); // Create QLabel to display selected item's type
    QLabel labelFileName(&mainWindow); // Create QLabel to display selected item's file name
    QLabel labelFileSize(&mainWindow); // Create QLabel to display selected item's file size
    QCheckBox checkBoxIsDir(&mainWindow); // Create QCheckBox to display if selected item is a directory

    QObject::connect(&treeView, &QTreeView::clicked, [&]() {
        QModelIndex index = treeView.currentIndex();
        checkBoxIsDir.setChecked(model.isDir(index));
        labelPath.setText(model.filePath(index));
        labelType.setText(model.type(index));

        QString fileName = model.fileName(index);
        labelFileName.setText(fileName);

        qint64 fileSize = model.size(index) / 1024;
        if (fileSize < 1024)
            labelFileSize.setText(QString("%1 KB").arg(fileSize));
        else
            labelFileSize.setText(QString::asprintf("%.1f MB", fileSize / 1024.0));
    });

    layout->addWidget(&checkBoxIsDir); // Add checkBoxIsDir to layout
    layout->addWidget(&labelPath); // Add labelPath to layout
    layout->addWidget(&labelType); // Add labelType to layout
    layout->addWidget(&labelFileName); // Add labelFileName to layout
    layout->addWidget(&labelFileSize); // Add labelFileSize to layout

    mainWindow.setCentralWidget(centralWidget); // Set central widget for mainWindow
    mainWindow.resize(1000,1000);
    mainWindow.show();


    return app.exec();
}

运行效果

代码演示2:

#include <QApplication>
#include <QListView>
#include <QStringListModel>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QStringListModel model; // 创建QStringListModel对象

    // 设置字符串列表数据
    QStringList dataList;
    dataList << "Apple" << "Banana" << "Grapes" << "Orange";
    model.setStringList(dataList);

    QListView listView; // 创建QListView对象
    listView.setModel(&model); // 将QStringListModel设置为QListView的数据模型

    // 在QStringListModel中添加、删除和插入项目
    model.insertRows(2, 1); // 在索引2处插入1个项目
    model.setData(model.index(2), "Cherry"); // 在索引2处设置项目的数据
    model.removeRows(1, 1); // 删除索引1处的1个项目

    // 获取QStringListModel中的数据
    QStringList result = model.stringList();
    qDebug() << "Data in QStringListModel:";
    for (const QString& item : result) {
        qDebug() << item;
    }

    listView.show();

    return app.exec();
}

运行效果

输出如下: 

Data in QStringListModel:

"Apple"

"Cherry"

"Grapes"

"Orange"

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

矩阵与图的关系:矩阵是图,图是矩阵

原文连接 线性代数最被低估的一个事实&#xff1a;矩阵是图&#xff0c;图是矩阵。 将矩阵编码为图是一种取巧的行为(cheat code)&#xff0c;它其使复杂的行为变得易于研究。 让我告诉你怎么做&#xff01; 1. 非负矩阵的有向图 &#xff08;The directed graph of a nonne…

ChatGPT影响大学生思想行为模式的三个维度

ChatGPT作为新一代AI技术的代表&#xff0c;深刻嵌入并影响着大学生的日常学习和生活场景&#xff0c;其在提升学习研究效率、拓宽认知阈限、重塑人机互动模式等方面带来极大突破&#xff0c;也会对大学生的思想行为模式产生潜在的影响&#xff0c;这些影响可以从个体、关系与社…

Linux设置虚拟内存扩容-偷鸡省钱小技巧-消耗服务器的存储内存转换成运行内存-之强行突破境界

阿丹&#xff1a; 这一段时间各大运营商都在相互内卷&#xff0c;趁着这股劲拿下了几个服务器。因为降本升效&#xff08;囊中羞涩&#xff09;的宗旨&#xff0c;买的服务器的内存并没有那么大所以偷鸡技巧这就来了。 设置虚拟内容-让4G内存up!up!up!到更高&#xff01; 操作…

自己实现 SpringMVC 底层机制 系列之-实现任务阶段 7- 完成简单视图解析

&#x1f600;前言 自己实现 SpringMVC 底层机制 系列之-实现任务阶段 7- 完成简单视图解析 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力…

SAP VK11/VK12 创建/更新价格记录

1、事务码VK11&#xff0c;创建物料价格 例如&#xff0c;客户10001&#xff0c;物料200001&#xff0c;价格120&#xff0c;有效期是2023.08.23-9999.12.31 现在有活动&#xff0c;在2023.08.23到2023.08.31想要维护一个活动价格100&#xff0c;而2023.09.01到9999.12.31还是…

Java开发中非常好用的工具

一、项目工具 1.1 IDE 主流的 Java 开发工具现在非 IntelliJ IDEA 莫属。前几年&#xff0c;可能 Eclipse 还能和 IDEA 一争高下&#xff0c;到了现在已经基本是 IDEA 的天下了。 就拿我自己来说吧&#xff0c;我最早用 IDEA&#xff0c;后来用了几年 Eclipse&#xff0c;再后…

EasyExcel实现多sheet文件导出

文章目录 EasyExcel引入依赖表结构学生表课程表教师表 项目结构下载模板实体类StudentVoCourseVoTeacherVo ControllerServiceEasyExcelServiceStudentServiceCourseServiceTeacherService ServiceImplEasyExcelServiceImplStudentServiceImplCourseServiceImplTeacherServiceI…

嵌入式是假风口?其实是你不够强!

嵌入式系统&#xff0c;作为一种集成电路技术的应用&#xff0c;近年来备受瞩目。然而&#xff0c;有人质疑嵌入式系统是否真的有那么大的市场前景&#xff0c;甚至认为这只是一个假风口。但实际上&#xff0c;嵌入式系统的发展潜力远不止于此&#xff0c;关键在于个人实力的提…

PI SSL证书导入

导语&#xff1a;最近在通过PI系统&#xff0c;做REST接口&#xff0c;对方地址是https的&#xff0c;调用时出现错误&#xff1a;【适配器框架出现异常: iaik.security.ssl.SSLCertificateException; Peer certificate relected by ChainVerifie】&#xff0c;此问题是因为这个…

SIP播放解码器

SIP-7101 SIP播放解码器 一、描述 SIP-7101是我司的一款壁挂式SIP网络播放终端&#xff0c;具有10/100M以太网接口&#xff0c;配置一路继电器输出和一路线路输出&#xff0c;可将内部音源输出到外接功放&#xff0c;可实现广播播放功能。SIP-7101作为网络SIP系统的播放终端&…

在Linux上安装redis7

1.检测虚拟机环境 1.1 bit检测命令&#xff1a;getconf LONG_BIT&#xff08;建议使用64bit做开发&#xff09; 1.2 gcc环境检测&#xff1a;gcc -v 如果不具备gcc环境&#xff0c;则使用yum -y install gcc- c命令进行c环境的安装 2.开始安装 2.1 下载redis&#xff1a; 进…

7、Vue 核心技术与实战 day07

1.1 vuex概述 1.2 构建 vuex [多组件数据共享] 环境 1.创建项目 vue create vuex-demo2.创建三个组件, 目录如下 |-components |--Son1.vue |--Son2.vue |-App.vue3.源代码如下 App.vue在入口组件中引入 Son1 和 Son2 这两个子组件 <template><div id"app&qu…

利用LLM模型微调的短课程;钉钉宣布开放智能化底座能力

&#x1f989; AI新闻 &#x1f680; 钉钉宣布开放智能化底座能力AI PaaS&#xff0c;推动企业数智化转型发展 摘要&#xff1a;钉钉在生态大会上宣布开放智能化底座能力AI PaaS&#xff0c;与生态伙伴探寻企业服务的新发展道路。AI PaaS结合5G、云计算和人工智能技术的普及和…

【TS】typescript基础知识

一、类型注解 : number就是类型注解&#xff0c;为变量添加类型约束的方式&#xff0c;约定了什么类型&#xff0c;就只能给变量赋什么类型的值 let age: number 18二、变量命名规则和规范 命名规则&#xff1a;变量名称只能出现数字&#xff0c;字母&#xff0c;下划线(_)…

无涯教程-Python - 环境设置

Python在包括Linux和Mac OS X在内的各种平台上都可用。让无涯教程了解如何安装设置Python环境。 最新的源代码,二进制文件,文档,新闻等可在Python的官方网站上找到https://www.python.org/ 您可以从https://www.python.org/doc/该文档有HTML,PDF和PostScript格式。 安装Pyth…

SD内存卡格式化后如何数据恢复教程

SD内存卡是一种常用的存储设备&#xff0c;可用于储存各种类型的数据&#xff0c;包括照片、音频、视频等。在使用过程中&#xff0c;你是否因为SD卡格式化而失去了重要数据而感到困扰&#xff1f;那么这篇文章的内容将能够帮助您快速有效地恢复格式化后的数据。 图片来源于网络…

python编写四画面同时播放swap视频

当代技术让我们能够创建各种有趣和实用的应用程序。在本篇博客中&#xff0c;我们将探索一个基于wxPython和OpenCV的四路视频播放器应用程序。这个应用程序可以同时播放四个视频文件&#xff0c;并将它们显示在一个GUI界面中。 C:\pythoncode\new\smetimeplaymp4.py 准备工作…

Unity实现广告滚动播放、循环播放、鼠标切换的效果

效果&#xff1a; 场景结构&#xff1a; 特殊物体&#xff1a;panel下面用排列组件horizent layout group放置多个需要显示的面板&#xff0c;用mask遮罩好。 using System.Collections; using System.Collections.Generic; using DG.Tweening; using UnityEngine; using Unity…

达梦数据库curd的简单使用

目录 添加表空间 删除表空间 添加表空间 create tablespace "test_db" datafile E:\dm_data\DM6.DBF size 32--制定路径 create tablespace “test_db”&#xff1a;创建一个名为test_db的表空间 datafile ‘DM6.DBF’&#xff1a;表示数据文件名为TDM6.DBF&…

胖小酱之听话

首先&#xff0c;我们来看看何为“物质奖励”&#xff1f; 所谓的物质奖励&#xff0c;简单通俗地说就是运用物质上的满足&#xff0c;去调动孩子的积极、主动和创造能力&#xff0c;其中物质奖励的形式一般体现在各种实物的需求方面&#xff0c;比如游戏机、玩具车、手机…