当前位置: 首页 > news >正文

Qt文件管理系统

引言

今天我将使用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文件管理系统便已完成,至于其他功能有需要可以在此基础上进行完善。

整体效果

相关文章:

  • Spring AI相关的面试题
  • 算法如何测试,如果数据量很大怎么办?
  • 逆波兰表达式
  • [Lc17_多源 BFS_最短路] 矩阵 | 飞地的数量 | 地图中的最高点 | 地图分析
  • 串口接收不到数据,串口RX配置(f407),f103和f407的区别
  • Linux第二章第三章练习
  • python总结
  • 微调这件小事:训练集中的输入数据该作为instruction还是input?从LLaMA-Factory的源码中寻找答案吧~
  • 深度学习框架PyTorch——从入门到精通(8)保存并加载模型
  • 渐进式滑坡多场信息演化特征与数据挖掘研究
  • 蓝桥杯C++基础算法-0-1背包(优化为一维)
  • keda基于postgresql伸缩dify-api服务
  • Vite 创建 Vue3 项目指定 Package name 问题:Invalid package. json name
  • list的模拟实现和学习
  • 基于Matlab的大气湍流光束传输特性的研究
  • 基于springboot的古典舞在线交流平台(046)
  • 使用 Node.js 从零搭建 Kafka 生产消费系统
  • 数组作为哈希表的妙用:寻找缺失的第一个正数
  • 【NR NTN 3GPP协议】非地面网络(NR NTN)3GPP协议简介
  • Java-01-源码篇-并发编程-多线程常见接口讲解
  • 文化润疆|为新疆青少年提供科普大餐,“小小博物家(喀什版)”启动
  • 上海北外滩,未来五年将如何“长个子”“壮筋骨”?
  • 中保协发布《保险机构适老服务规范》,全面规范保险机构面向老年人提供服务的统一标准
  • 西北大学副校长范代娣成陕西首富?系家庭财富,本人已从上市公司退出
  • 老人将房产遗赠给外孙,三个女儿却认为遗嘱应无效,法院判了
  • 10名“鬼火少年”凌晨结队在城区飙车,警方:涉非法改装,正处理