Qt文件管理系统

发布于:2025-03-25 ⋅ 阅读:(29) ⋅ 点赞:(0)

引言

今天我将使用model/view模型视图框架来完成一个简单的Qt文件管理系统,主要使用到了QTreeView、QTabelView视图和QFileSystemModel文件系统模型。

界面设计

使用Qt创建项目并勾选创建ui文件,打开ui文件,使用Tree View、Table View、Stacked Widget以及布局来构建如下界面,当然也可以使用代码来完成界面设计。

系统功能

实现功能如下:

  • 左侧树形视图:显示整个文件系统的目录结构。用户可以通过展开和折叠节点来浏览不同的目录。

  • 右侧表格视图:显示当前选中的目录中的文件和子目录。当用户在树形视图中点击某个目录时,表格视图会更新为该目录下的内容。

  • 交互逻辑

    • 在树形视图中点击某个目录,表格视图会显示该目录下的内容。

    • 在表格视图中点击某个子目录,表格视图会进入该子目录并显示其内容。

创建窗口分裂器,用于将窗口分为两部分,允许用户通过拖动分割条来调整两部分的大小。

    // 窗口分裂器
    auto splitter = new QSplitter();
    splitter->addWidget(ui->naviTreeView);
    splitter->addWidget(ui->stackedWidget);

    auto hlayout = new QHBoxLayout(this);
    hlayout->addWidget(splitter);

创建文件系统模型

    // 文件系统模型
    QFileSystemModel* model =new QFileSystemModel(this);
    model->setRootPath("");
    //model->setFilter(QDir::Dirs | QDir::NoDotAndDotDot);  // 只显示目录不包括.和..

视图设置模型

    // 树视图
    ui->naviTreeView->setModel(model);
    // 表格视图
    ui->tableView->setModel(model);

为树视图隐藏多余的列

    // 隐藏除第一列的所有列
    for(size_t i = 1;i<model->columnCount();++i)
    {
        ui->naviTreeView->setColumnHidden(i,true);
    }

树视图和表格视图的点击事件

    connect(ui->naviTreeView,&QTreeView::clicked,[=](const QModelIndex& index){
        ui->tableView->setRootIndex(index);
    });

    connect(ui->tableView,&QTableView::clicked,[=](const QModelIndex& index){
        auto idx = model->index(index.row(),0,ui->tableView->rootIndex());
        ui->tableView->setRootIndex(idx);
    });

至此,Qt文件管理系统便已完成,至于其他功能有需要可以在此基础上进行完善。

整体效果