QFileSystemModel绑定到 QTreeView、 QListView、QTableView

QFileSystemModel绑定到 QTreeView、 QListView、QTableView,实现文件的查看

.h文件

#ifndef FILESYSEXAMPLE_H
#define FILESYSEXAMPLE_H

#include <QMainWindow>
#include <QFileSystemModel>

namespace Ui {
class FileSysExample;
}

class FileSysExample : public QMainWindow
{
    Q_OBJECT
private:
    QFileSystemModel *m_model;

public:
    explicit FileSysExample(QWidget *parent = nullptr);
    ~FileSysExample();

private slots:
    void on_treeView_clicked(const QModelIndex &index);

    void on_actSetRoot_triggered();

    void on_btnApplyFilter_clicked();

    void on_chkBoxEnableFilter_clicked(bool checked);

    void on_radioShowAll_clicked();

    void on_radioShowOnlyDir_clicked();

private:
    Ui::FileSysExample *ui;
};

#endif // FILESYSEXAMPLE_H

.cpp文件

#include "filesysexample.h"
#include "ui_filesysexample.h"
#in
Qt中使用`QFileSystemModel`和`QTreeView`来显示指定目录下的内容是一个常见的需求,通常用于实现文件浏览器或资源管理器的功能。以下是一个完整的实现方法: ### 初始化QFileSystemModel并设置根目录 首先需要创建一个`QFileSystemModel`实例,并通过`setRootPath()`方法设置要显示的目录路径。这个路径决定了模型将从哪个目录开始加载文件和子目录信息。 ```cpp QFileSystemModel *model = new QFileSystemModel(this); model->setRootPath("C:/Your/Target/Directory"); // 设置要显示的根目录 ``` ### 配置QTreeView绑定模型 接下来,创建一个`QTreeView`实例,并将之前创建的模型设置为其数据源。通过`setRootIndex()`方法指定模型中的索引位置,这个索引通常由`model->index()`返回,表示要显示的根目录在模型中的位置。 ```cpp QTreeView *treeView = new QTreeView(this); treeView->setModel(model); treeView->setRootIndex(model->index("C:/Your/Target/Directory")); // 设置QTreeView的根索引 ``` ### 可选:设置文件过滤器 如果只需要显示特定类型的文件(如`.txt`或`.jpg`),可以使用`setNameFilters()`方法设置过滤规则。此外,通过`setNameFilterDisables()`可以控制未匹配的文件是否被禁用(灰色显示)还是完全隐藏。 ```cpp QStringList filters; filters << "*.txt" << "*.jpg"; // 仅显示.txt和.jpg文件 model->setNameFilters(filters); model->setNameFilterDisables(false); // 不匹配的文件不显示 ``` ### 可选:设置目录和文件的显示过滤 可以通过`setFilter()`方法进一步控制显示哪些类型的条目。例如,仅显示目录和普通文件,并排除`.`和`..`等特殊目录。 ```cpp model->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); ``` ### 完整示例代码 以下是一个完整的示例,展示如何使用`QFileSystemModel`与`QTreeView`结合来显示指定目录的内容: ```cpp #include <QApplication> #include <QFileSystemModel> #include <QTreeView> #include <QDir> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建文件系统模型 QFileSystemModel *model = new QFileSystemModel; model->setRootPath("C:/Your/Target/Directory"); // 设置根路径 // 设置文件过滤器(可选) QStringList filters; filters << "*.txt" << "*.jpg"; model->setNameFilters(filters); model->setNameFilterDisables(false); // 不匹配的文件不显示 // 设置目录和文件过滤(可选) model->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); // 创建QTreeView并设置模型 QTreeView *treeView = new QTreeView; treeView->setModel(model); treeView->setRootIndex(model->index("C:/Your/Target/Directory")); // 设置根索引 treeView->resize(800, 600); treeView->show(); return app.exec(); } ``` ### 注意事项 - `QFileSystemModel`是异步加载的,因此在大型目录中可能会有延迟,但Qt会自动处理性能优化。 - 如果希望多个视图(如`QListView`、`QTableView`)同步显示相同目录内容,只需将它们绑定到同一个模型并设置相同的`rootIndex`即可[^2]。 - 通过`QDir::Filter`可以灵活控制显示的文件类型和目录结构[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

castlooo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值