首页 > 编程语言 >C++ Qt开发:QFileSystemModel文件管理组件

C++ Qt开发:QFileSystemModel文件管理组件

时间:2024-03-08 11:33:23浏览次数:27  
标签:index const Qt C++ QString model QFileSystemModel QModelIndex

Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QFileSystemModel组件实现文件管理器功能。

QFileSystemModel是Qt框架中的一个关键类,用于在Qt应用程序中管理和展示文件系统的结构。该模型提供了一个方便的接口,使得开发者可以轻松地在应用程序中集成文件和目录的树形结构,并通过视图组件(如QTreeViewQListViewQTabView等)展示给用户。

以下是 QFileSystemModel 类的一些重要函数:

函数 描述
QFileSystemModel(QObject *parent = nullptr) 构造函数,创建一个 QFileSystemModel 对象。
void setRootPath(const QString &path) 设置模型的根路径,指定从哪个目录开始显示文件系统。
QString rootPath() const 获取模型的根路径。
void setFilter(QDir::Filters filters) 设置目录过滤器,用于过滤显示的文件和目录。
void setResolveSymlinks(bool enable) 设置是否解析符号链接。
void sort(int column, Qt::SortOrder order) 对指定列进行排序。
QModelIndex index(const QString &path, int column = 0) const 根据文件路径和列号获取模型索引。
QFileInfo fileInfo(const QModelIndex &index) const 获取给定索引处的文件信息。
bool mkdir(const QModelIndex &index, const QString &name) 在给定索引处的目录中创建新目录。
bool rmdir(const QModelIndex &index) 删除给定索引处的目录。
bool remove(const QModelIndex &index) 删除给定索引处的文件。
void directoryLoaded(const QString &path) 在目录加载完成时发射的信号。
void fileRenamed(const QString &path, const QString &oldName, const QString &newName) 在文件重命名时发射的信号。
QModelIndex setRootPath(const QString &path) 设置根路径,并返回表示新路径的模型索引。
QString filePath(const QModelIndex &index) const 获取给定索引处的文件路径。
void setReadOnly(bool enable) 设置模型为只读模式。
bool isReadOnly() const 判断模型是否为只读模式。
void setNameFilters(const QStringList &filters) 设置名称过滤器,用于限制模型中显示的文件类型。
QStringList nameFilters() const 获取当前的名称过滤器。
void setRootIndex(const QModelIndex &index) 设置根索引。
QModelIndex rootIndex() const 获取当前的根索引。
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const 获取模型索引。
QModelIndex parent(const QModelIndex &index) const 获取给定索引的父索引。
int rowCount(const QModelIndex &parent = QModelIndex()) const 获取给定父索引下的行数。
int columnCount(const QModelIndex &parent = QModelIndex()) const 获取给定父索引下的列数。
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const 获取模型数据。

当需要使用此模型时,我们需要导入QFileSystemModel组件, 并在主类内定义QFileSystemModel类型的模型指针,并在主函数内通过new QFileSystemModel新建类,通过model->setRootPath设置默认停留的指针位置,最后调用model->setNameFilters设置过滤器,此处我们只需要显示*.exe,*.txt,*.mp4三种格式即可,最后使用ui->treeView->setModel将此模型设置到组件内即可,其完整代码非常简单,如下所示;

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 新建类指针
    model=new QFileSystemModel(this);

    // 设置根目录
    model->setRootPath(QDir::currentPath());

    // 设置过滤器,只过滤出txt,mp4
    QStringList filter;
    filter << "*.txt" << "*.mp4";

    // 使用过滤器
    model->setNameFilters(filter);
    model->setNameFilterDisables(false);

    // 设置数据模型
    ui->treeView->setModel(model);
}

数据模型内的选中项可通过使用模型内提供的各种方法来实现取值,例如使用model->isDir可获取到是否为目录,通过model->filePath则可用于得到文件的路径等。

// 被点击后触发
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));
    }
    else
    {
        ui->LabFileSize->setText(QString::asprintf("%.1f MB",sz/1024.0));
    }
}

运行后则可以通过点击不同的目录树展开,由于设置了只过滤特定的文件所以此处显示的结果如下所示;

标签:index,const,Qt,C++,QString,model,QFileSystemModel,QModelIndex
From: https://www.cnblogs.com/LyShark/p/18060620

相关文章

  • 复试C++ 异常 看程序写结果
    就算每一个case后面都没有break,throw相当于起了break的作用?#include<iostream>#include<stdexcept>usingnamespacestd;classErrorA:publicruntime_error{public:ErrorA():runtime_error{"errorAAAA"}{}};classErrorB:publicruntime_erro......
  • Qt开发,报错:Error while building/deploying project untitled (kit: ....)
    1、问题描述 Qt开发,编译时,报错如下:1Cannotfindfile:F:\linux\...\Console.pro.213:49:47:进程"D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin\qmake.exe"退出,退出代码2。3Errorwhilebuilding/deployingprojectConsole(kit:DesktopQt5.14.2MSVC201764bit)4......
  • C++入门编程----C++运算符(8)
    什么是运算符运算符是让程序执行特定的数学或逻辑操作的符号,用来表示针对数据的特定操作,也称之为操作符。C++运算符分别有算术运算符、关系运算符、逻辑运算符、赋值运算符、位运算符、移位运算符、sizeof运算符、三目运算符、逗号运算符和域解析运算符。算术运算符C++中的算术......
  • c++ lambda表达式
    引入lambda表达式也有人称之为匿名函数,能够在任何作用域下快速定义一个函数下面这行代码就是一个最简单的lambda表达式,最后输出为3autof=[](intx,inty)->int{returnx+y;};cout<<f(1,2);我们来解析一下lambda表达式autof=[](intx,inty)->int{returnx+y;};......
  • C++保证线程安全的方式
    1、互斥量可以确保同一时间只有一个线程访问临界区,防止出现竞态条件。2、原子操作std::atomic<int>mutex(1);对原子变量的操作是线程安全的。3、读写锁std::shared_mutexmutex;//读者:共享锁定mutex.lock_shared();mutex.unlock_shared();//写者:独占锁定mutex.lock......
  • c/c++指针中 * 和 & 的区别与联系
    在C语言中,*和&是两个非常基础但功能相反的操作符,它们分别是解引用(dereference)操作符和取地址(address-of)操作符。&(取地址操作符)用途:&操作符用来获取变量的内存地址。示例:假设有一个整型变量intx=10;,则&x表示获取变量x的内存地址。如果你有一个指针变量想要存储变量x的地址,可......
  • C++语言代码开发示例-身份证实名认证接口
    实名认证API实时联网核验个人身份信息与所持身份证件人员的一致性,可满足不同应用场景的不同实名认证需求,如身份证号+姓名核验、身份证号+姓名+人像核验、身份证号+姓名+证件人像+现场人像核验等,有助于推动诚信网络环境建设,降低利用网络进行违法犯罪的可能性,防止纠纷和诈骗,确保消费......
  • C++ 萃取机 Iterator Traits
    IteratorTraits萃取出Iterator的性质:迭代器种类、迭代器所指数据类型、迭代器距离类型、迭代器所指数据引用、迭代器所指数据指针。根据不同的迭代器种类可以采取不同的算法策略。但是用iter::interator_categotry、iter::value_type、iter::pointer...就可以访问到迭代器的......
  • Qt - 坐标系及转换
    屏幕与窗口****屏幕坐标(绝对坐标)窗口坐标(相对坐标)****pos():描述:本控件到父控件的相对坐标窗口的屏幕坐标(上图黑线)描述:窗口左上角-屏幕原点QPoint=this->pos()centerWidet到pushbutton的距离(上图蓝线)描述:button的父控件-centerWidetui->button->pos()描述:button认一......
  • qt输入控件限制输入类型
    限制输入类型有两个控件,根据第一个控件的类型,限制第二个控件可以输入的值代码QComboBoxcomboBox;comboBox.addItem("字符串");comboBox.addItem("数字");layout.addWidget(&comboBox);//连接信号与槽QObject::connect(&comboBox,QOverload<int>::of(&QComboBox::curre......