QTreeWidget使用记录(2)

目的:使用QTreeWidget来浏览硬盘目录的文件结构。

功能要求:

1.选择某一磁盘根目录后,显示根目录下的文件和文件夹,且显示对应的图标;

2.单击列表项的箭头区域展开和折叠,展开时加载下一层级的文件和文件夹;

3.单击列表项的图标或者文本区域为选中状态;

4.样式设置,包括边框,表头视图、底色、选中、鼠标Hover,滚动条的样式。

实现方案:

2.单击列表项的箭头区域展开和折叠,展开时加载下一层级的文件和文件夹;

默认情况下单击QTreeWidgetItem可展开折叠,即连接一下信号槽即可:

connect(ui.m_treeWidget, &QTreeWidget::itemClicked, this, &CDemoSettingsView::slotClicked);

但是本文单击需要选中Item,不展开,所以设计为子类化QTreeWidgetItem,通过事件过滤来重发itemClick信号。参考代码实现如下:

bool CDirsTreeWidget::eventFilter(QObject * watched, QEvent * event)
{if (watched == viewport()){if (event->type() == QEvent::MouseButtonPress) {QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);if (mouseEvent->button() == Qt::LeftButton) {QTreeWidgetItem *item = this->itemAt(mouseEvent->pos());int count = this->indexOfTopLevelItem(item);QRect rc = this->visualItemRect(item);if (item != nullptr) {QPoint pos = mouseEvent->pos();if (pos.x() < rc.x()) {m_arrowPress = true;}}}}else if (event->type() == QEvent::MouseButtonRelease){QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);if (mouseEvent->button() == Qt::LeftButton) {QTreeWidgetItem *item = this->itemAt(mouseEvent->pos());if (item != nullptr) {QPoint pos = mouseEvent->pos();QRect rc = this->visualItemRect(item);if (pos.x() < rc.x()) {if (m_arrowPress){emit itemClicked(item, 0);m_arrowPress = false;return true;}}}}}}return QTreeWidget::eventFilter(watched, event); // 事件未被接受,传递给父类处理
}

其中    QRect rc = this->visualItemRect(item);可获得箭头X的右侧范围,通过判断这个值就可以限定到点击点头才发送itemClick信号,从而实现展开/折叠、选中分开。然后再itemClick的槽函数中进一步获取文件和文件夹。参考代码如下:

  void CDemoSettingsView::slotClicked(QTreeWidgetItem * item, int column)
{if (item->data(0, Qt::UserRole + 1).toBool())   // 为true,已经添加过了,不用再添加了return;item->setData(0, Qt::UserRole + 1, true);QString file = item->data(0, Qt::UserRole).toString() + item->text(0);QFileInfo* fileInfo = new QFileInfo(file);if (fileInfo->isDir()) {getFileOnDirectory(item, file);    // 是文件夹就获取里面的文件,添加子节点}item->setExpanded(true);
}void CDemoSettingsView::getFileOnDirectory(QTreeWidgetItem* item, QString directoryPath)
{QDir dir(directoryPath);QFileInfoList fileInfoList = dir.entryInfoList();QFileIconProvider iconProvider;for (QFileInfo fileInfo : fileInfoList) {if (fileInfo.fileName() == "." || fileInfo.fileName() == "..")continue;QString filepath = fileInfo.path();QString filename = fileInfo.fileName();QTreeWidgetItem* child = new QTreeWidgetItem();child->setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicatorWhenChildless);child->setText(0, filename);child->setIcon(0, QIcon(iconProvider.icon(fileInfo)));child->setData(0, Qt::UserRole, filepath+"/"); child->setData(0, Qt::UserRole + 1, false); item->addChild(child); }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/461199.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件上传知识梳理:原理、工具、绕过、利用与防御

文章简介&#xff1a; 本文全面梳理了文件上传相关知识&#xff0c;包括文件上传漏洞的原理及危害&#xff0c;介绍了 Webshell 相关工具&#xff08;如冰蝎、哥斯拉、蚁剑&#xff09;&#xff0c;详细阐述了文件上传绕过检测的多种方法&#xff08;前端检测、服务端检测的各…

学Linux的第六天

目录 账户和组管理 工作组管理 创建工作组groupadd 修改工作组groupmod 添加/删除组成员gpasswd 删除工作组groupdel 查看用户登录系统的情况 users查看当前登录系统的用户 last命令 lastlog命令 w命令 显示登录到系统的用户信息 who命令 Linux文件系统权限 文件…

KKFileView v4.4.0文件预览服务 编译和window运行和nginx代理设置

目录 一、拉取代码 二、编译打包 三、测试使用 四、实际使用 五、其他问题 本文记录&#xff0c;使用最新v4.4.0版本KKFileView源代码&#xff0c;在本地window上搭建文件预览服务&#xff0c;并通过nginx反向代理实现https访问。 一、拉取代码 从官网github上下载源代码…

树莓派基础设置--1.更新和升级操作系统

注意&#xff1a;使树莓派保持最新状态可以提高系统的安全性&#xff0c;但对于开发人员并不建议随意更新&#xff01; 一、图像化界面 一般桌面的右上角也会显示树莓派系统更新的提示&#xff0c;可以点击相应选项进行更新&#xff01; 二、使用APT 用来管理软件安装、升级…

用Pyhon写一款简单的益智类小游戏——2048

文字版——代码及讲解 代码—— import random# 初始化游戏棋盘 def init_board():return [[0] * 4 for _ in range(4)]# 在棋盘上随机生成一个2或4 def add_new_tile(board):empty_cells [(i, j) for i in range(4) for j in range(4) if board[i][j] 0]if empty_cells:i,…

STL---unordered_set与unordered_map与前言(哈希表)

文章目录 哈希哈希容器&#xff1a;unordered_set与unordered_map哈希哈希表哈希函数哈希冲突解决哈希冲突扩容 哈希表的代码实现线性探测法解决哈希冲突哈希桶解决哈希冲突 哈希 哈希容器&#xff1a;unordered_set与unordered_map unordered_set 定义如下: 常用接口 跟桶…

深度学习(八) TensorFlow、PyTorch、Keras框架大比拼(8/10)

一、深度学习框架概述 深度学习框架在当今人工智能和机器学习领域中占据着至关重要的地位。其中&#xff0c;TensorFlow 由 Google 开发&#xff0c;自 2015 年发布以来&#xff0c;凭借其灵活的计算图、自动微分功能以及跨平台支持等特点&#xff0c;迅速成为主流深度学习框架…

盘点Windows10系统之下好用的录屏工具!

在当前时代&#xff0c;互联网媒体的普及。图片视频等随处可见&#xff0c;越来越多的工作、学习、培训等都以转变成视频形式。我的工作就是离不开利用视频来进行交流。也因如此&#xff0c;很多时候因为直播中需要进行回顾等录屏需求&#xff0c;使用过多款录屏软件。拥有一款…

【MySQL】实战篇—项目需求分析:ER图的绘制与关系模型设计

在软件开发中&#xff0c;数据库是信息系统的核心部分&#xff0c;合理的数据库设计能够显著提高系统的性能和可维护性。 ER图&#xff08;实体-关系图&#xff09;是数据库设计的重要工具&#xff0c;它通过图形化的方式描述了数据实体及其相互关系&#xff0c;帮助开发者和设…

短信验证码发送实现(详细教程)

短信验证码 接口防刷强检验以及缓存验证码阿里云短信服务操作步骤验证码发送实现 好久没发文啦&#xff01;最近也是在工作中遇到我自认为需要记录笔记的需求&#xff0c;本人只求日后回顾有迹可寻&#xff0c;不喜勿喷&#xff01; 废话不多说&#xff0c;直接上代码&#xff…

深度学习数学基础之梯度

深度学习数学基础之梯度 方向余弦 方向导数 梯度&#xff08;向量&#xff09; 变化率最大的方向或者说方向导数最大的方向就是梯度向量的方向指向方向导数变化最大的方向

PYNQ 框架 - VDMA驱动 - 帧缓存

目录 1. 简介 2. 代码分析 2.1 _FrameCache 类定义 2.1.1 xlnk.cma_array() 2.1.2 pointerNone 2.1.3 PynqBuffer 2.2 _FrameCache 例化与调用 2.3 _FrameCache 测试 2.4 _FrameList 类定义 2.5 _FrameList 例化与调用 2.6 _FrameList 测试 3. 帧的使用 3.1 读取帧…

Cloud Compare学习笔记

1.1 导出文件 导出点云数据为 PCD 格式时&#xff0c;系统提供了三种保存选项&#xff0c;分别是 Compressed Binary&#xff08;压缩二进制&#xff09;、Binary&#xff08;二进制&#xff09;、ASCII/Text&#xff08;文本&#xff09; Compressed Binary&#xff08;压缩…

电商直播带货乱象频出,食品经销商如何规避高额损失?

近年来&#xff0c;电商直播带货乱象频出&#xff0c;食品经销行业售卖商品涉嫌违规的事件层出不穷。以食品安全为例&#xff0c;2024年10月17日市场监管总局发布了关于11批次食品抽检不合格情况的通告&#xff0c;在抽检的650批次样品中&#xff0c;发现存在食品添加剂超范围超…

攻防世界 MISC miao~详解

下载压缩包&#xff0c;但是尝试解压的时候提示错误&#xff0c;刚开始以为是伪加密之类的&#xff0c;但是尝试了一圈之后&#xff0c;发现并没有问题。后面用bandizip打开&#xff0c;得到了一张图片&#xff1a; 拖到010editor里面查看&#xff0c;没有发现什么 于是用随波逐…

基于Unet卷积神经网络的脑肿瘤MRI分割

项目源码获取方式见文章末尾&#xff01; 回复暗号&#xff1a;13&#xff0c;免费获取600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【YOLO模型实现农作物病虫害虫识别带GUI界面】 2.【卫星图像道路检测DeepLabV3P…

记一次:使用使用Dbeaver连接Clickhouse

前言&#xff1a;使用了navicat连接了clickhouse我感觉不太好用&#xff0c;就整理了一下dbeaver连接 0、使用Navicat连接clickhouse 测试连接 但是不能双击打开&#xff0c;可是使用命令页界面&#xff0c;右键命令页界面&#xff0c;然后可以用sql去测试 但是不太好用&#…

python nan是什么

NaN&#xff08;not a number&#xff09;&#xff0c;在数学表示上表示一个无法表示的数&#xff0c;这里一般还会有另一个表述inf&#xff0c;inf和nan的不同在于&#xff0c;inf是一个超过浮点表示范围的浮点数&#xff08;其本质仍然是一个数&#xff0c;只是他无穷大&…

ABAP开发学习——内存管理二

SAP内存与ABAP内存的不同 SAP内存 当在某个事务程序中输入了物料号等&#xff0c;在打开其他需要输入物料号的事务窗口中会自动带出&#xff0c;不需要自己输入&#xff0c;因为这些地方使用相同的parameter id&#xff0c;共享相同SAP内存区域 在数据库表TPARA中可以查看到 S…

如何在短时间内入门并掌握深度学习?

如何在短时间内快速入门并掌握深度学习&#xff0c;是很多读者的困惑——晦涩难懂的数学 知识、复杂的算法、烦琐的编程……深度学习虽然让无数读者心怀向往&#xff0c;却也让不少人望而生畏&#xff0c;深感沮丧&#xff1a;时间没少花&#xff0c;却收效甚微。 如何才能更好…