【Qt】实现显示指定路径目录结构

简介: 使用 Qt 的 QTreeView 显示指定路径下的目录结构

组件和结构

需要使用到 QDirModelQDir 库和 QTreeView 控件

计算机专业的应该知道 MVC 结构,Model - View - Controller ,模型 - 视图 - 控制器,分离代码,避免各种逻辑的代码冗杂在一起,为了使得代码结构清晰,也方便维护。

Qt 只有 MV 结构 Model-View,模型-视图,Controller 的部分集成在 View 中。设置一种数据的模型,使视图整体显示

实现

创建一个图形界面项目,主界面继承自 QMainWindow 。

在 ui 界面可以只设置一个 QTreeView 保留其默认名称 treeView

#include <QDirModel>
//...
class MainWindow : public QMainWindow
{
   
   
    Q_OBJECT
//...

private:
    QDirModel* m_dirModel;
};

头文件中只需要包含头文件 QDirModel,并添加私有成员变量 QDirModel* m_dirModel

源文件中,在构造函数中完成所有的设置,需要包含头文件 QDir 用于设置目录相关属性,初始化指针成员变量 m_dirModel,

#include <QDir>

MainWindow::MainWindow()
{
   
   
//...
QStringList filters;
filters << "*.cpp" << "*.h";
//...
m_dirModel = new QDirModel(filters, QDir::NoDotAndDotDot|QDir::AllDirs|QDir::Files, QDir::Name);

添加 filters 文件类型过滤,过滤只显示扩展名为 cpp 和 h 的文件,也可以不设置。

然后创建 QDirModel ,给予设置好的过滤为第一个参数,第二个参数为添加 QDir 的属性,属性之间使用逻辑或 |

属性 说明
QDir::NoDotAndDotDot 不包含 ... 目录
QDir::AllDirs 所有的目录
QDir::AllFiles 所有的文件

第三个参数为排序方法,设置为 QDir::Name,以文件名的方式排序

接下来设置模型和视图

m_dirModel->setReadOnly(true);

ui->treeView->setModel(m_dirModel);
ui->treeView->setColumnHidden(1, true);
ui->treeView->setColumnHidden(2, true);
ui->treeView->setColumnHidden(3, true);

设置模型为只读,不可修改,否则点击界面会意外触发修改文件或目录的名称。

使用 treeView 的 setModel 方法,将模型和视图联系起来,并设置1-3列内容隐藏,不显示详细列表大小,类型和修改时间,只显示目录和文件的名称。

最后设置指定路径,使用 treeView 的 setRootIndex 方法

ui->treeView->setRootIndex(m_dirModel->index("D:\\SomeDirectory"));

效果图:
treeView.png

完整代码,头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDirModel>
QT_BEGIN_NAMESPACE
namespace Ui {
   
    class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
   
   
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();


private:
    Ui::MainWindow *ui;
    QDirModel* m_dirModel;
};
#endif // MAINWINDOW_H

源文件:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDir>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
   
   
    ui->setupUi(this);
    QStringList filters;
    filters << "*.cpp" << "*.h";

    m_dirModel = new QDirModel(filters, QDir::NoDotAndDotDot|QDir::AllDirs|QDir::Files, QDir::Name);

    m_dirModel->setReadOnly(true);

    ui->treeView->setModel(m_dirModel);
    ui->treeView->setColumnHidden(1, true);
    ui->treeView->setColumnHidden(2, true);
    ui->treeView->setColumnHidden(3, true);
    ui->treeView->setRootIndex(m_dirModel->index("D:\\SomeDirectory"));

}

MainWindow::~MainWindow()
{
   
   
    delete ui;
}
目录
相关文章
|
存储 C++
基于Qt的简易文件压缩与解压缩工具设计与实现
基于Qt的简易文件压缩与解压缩工具设计与实现
559 1
|
监控 安全 Linux
Qt 文件类实战:解锁文件操作的无限可能
Qt 文件类实战:解锁文件操作的无限可能
678 1
|
算法 API C++
【Qt UI】QT 窗口/控件置顶方法详解
【Qt UI】QT 窗口/控件置顶方法详解
1076 0
|
编解码 C++ Windows
QT软件开发: QProcess启动进程完成交互并获取输出
QT软件开发: QProcess启动进程完成交互并获取输出
2951 0
QT软件开发: QProcess启动进程完成交互并获取输出
|
数据可视化
【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明
【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明
2945 3
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
|
API UED
【Qt 学习笔记】Qt窗口 | 状态栏 | QStatusBar的使用及说明
【Qt 学习笔记】Qt窗口 | 状态栏 | QStatusBar的使用及说明
1870 4
|
编解码 开发框架
【Qt 学习笔记】Qt窗口 | Qt窗口介绍 | QMainwindow类及各组件介绍
【Qt 学习笔记】Qt窗口 | Qt窗口介绍 | QMainwindow类及各组件介绍
746 3