# frameless
**Repository Path**: Ollivandergitee/frameless
## Basic Information
- **Project Name**: frameless
- **Description**: 无边框外观,用于清除重复的文件
- **Primary Language**: C++
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2022-02-21
- **Last Updated**: 2022-06-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# CheckDup
[TOC]
#### 简介
QT小工具,检测选中目录中的重复文件。
#### 编译环境
QtCreator4.8.2
Qt5.9.8
windows10
#### 功能特性
+ GUI
1. GUI圆角无边框+阴影
2. 添加最小化、最大化、关闭按钮并给三按钮添加qss,实现鼠标悬停颜色变深;
3. 重写鼠标事件,实现鼠标拖拽窗口。最大化去掉阴影
+ 检测重复文件
1. 遍历选中目录中的所有文件,存储文件信息到哈希映射:文件大小->文件路径
2. 遍历hashmap,size相同的文件,hash key相同,计算所有size相同的文件的md5
3. 文件size小于100M,直接计算MD5;大于100M的文件,每次计算100M,直到全部计算完得到最后MD5
+ 多线程/信号槽
1. 将检测文件进程moveToThread
2. 添加进度条progress bar和scanlabel显示当前正在计算MD5的文件,使用信号槽跨线程传递数据
3. 计算结束后,保存到hashmap中,文件MD5->文件路径。结果显示两个QListWidget,md5list和pathlist。
4. 给pathlist添加右键菜单,打开路径,删除文件
#### 更新
1. 在.pro文件中添加了icon
1. 添加双击事件,双击标题label就会最大化,再次双击窗口化
1. 运行起检测进程后,中途关闭窗口,进程没有结束依然在后来运行。因为qthread.quit()之后,thread内部的while循环还没有结束,qthread.wait()就会一直等待。解决办法是给thread对象设一个标志位,强制结束其内部的while循环,线程就可以正常退出
1. 给pathlist添加右键菜单之后,在list中没有元素的时候直接点击右键会crash,抛出segement fault。使用ActionContextMenu会抛异常,换成CustomContextMenu就不会
1. QDesktopServices::openUrl()传中文路径会报错,将参数用QUrl::fromLocalFile()构造一下
1. 修复拖拽bug。拖拽最大化最小化按钮窗口会跳跃
1. 支持拖拽得到路径