# 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. 重写鼠标事件,实现鼠标拖拽窗口。最大化去掉阴影 gui + 检测重复文件 1. 遍历选中目录中的所有文件,存储文件信息到哈希映射:文件大小->文件路径 2. 遍历hashmap,size相同的文件,hash key相同,计算所有size相同的文件的md5 3. 文件size小于100M,直接计算MD5;大于100M的文件,每次计算100M,直到全部计算完得到最后MD5 scan + 多线程/信号槽 1. 将检测文件进程moveToThread 2. 添加进度条progress bar和scanlabel显示当前正在计算MD5的文件,使用信号槽跨线程传递数据 3. 计算结束后,保存到hashmap中,文件MD5->文件路径。结果显示两个QListWidget,md5list和pathlist。 4. 给pathlist添加右键菜单,打开路径,删除文件 finish #### 更新 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. 支持拖拽得到路径