# TempPaste **Repository Path**: yihiko/temp-paste ## Basic Information - **Project Name**: TempPaste - **Description**: Qt+Sqlite实现的跨平台的便利贴,数据库以及文件操作都是异步的,支持历史记录以及快捷跳转书签,并且兼容所有常用编码类型以及二进制文件。 - **Primary Language**: C++ - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-07 - **Last Updated**: 2025-10-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: Qt, Sqlite ## README ## 项目简介 TempPaste 是一个功能丰富的文本编辑器,专为开发者和文本处理用户设计。它采用异步架构设计,提供流畅的用户体验,并集成了完善的文件管理和搜索系统。 ## 主要特性 ### 核心功能 - ✅ **多编码支持**:UTF-8、GBK、GB2312、BIG5、ASCII - ✅ **换行符管理**:CRLF、LF、CR 自动检测与转换 - ✅ **异步文件操作**:大文件无阻塞打开和保存 - ✅ **语法高亮**:基于 CodeEditor 的代码编辑器 - ✅ **窗口置顶**:便捷的置顶功能(快捷键 Ctrl+T) ### 文件管理 - 📁 **最近访问列表**:自动记录打开的文件 - 📁 **文件夹批量导入**:支持批量添加文件到项目 - 📁 **文件重命名**:在应用内直接重命名文件 - 📁 **智能记忆**:自动恢复上次打开的文件 ### 标签系统 - 🏷️ **代码标签**:为代码行添加自定义标签 - 🏷️ **快速跳转**:点击标签即可跳转到对应行 - 🏷️ **持久化存储**:标签信息自动保存到数据库 ### 搜索功能 - 🔍 **关键词搜索**:在最近访问列表中搜索文件 - 🔍 **时间范围筛选**:按访问时间过滤文件 - 🔍 **内容搜索**:支持当前文档或所有文档的内容搜索 - 🔍 **组合搜索**:多条件联合查询 ## 技术架构 ### 核心技术栈 - **框架**:Qt 5.x / 6.x - **数据库**:SQLite(带 WAL 模式优化) - **线程模型**:信号槽驱动的异步架构 - **设计模式**:单例模式、观察者模式 ### 架构设计 ``` ┌─────────────────────────────────────────┐ │ TempPaste (主窗口) │ ├─────────────────────────────────────────┤ │ CodeEditor │ RecentList │ LabelList │ └──────┬──────────────┬──────────────┬────┘ │ │ │ └──────────────┴──────────────┘ │ ┌──────────────┴───────────────┐ │ PageService (单例) │ │ - 文件管理 │ │ - 标签管理 │ │ - 最近访问 │ └──────────────┬───────────────┘ │ ┌──────────────┴───────────────┐ │ SearchService (单例) │ │ - 文件搜索 │ │ - 内容搜索 │ └──────────────┬───────────────┘ │ ┌──────────────┴───────────────┐ │ DbMgr (单例) │ │ - 异步数据库操作 │ │ - 事务管理 │ │ - 独立线程运行 │ └──────────────────────────────┘ ``` ## 核心组件说明 ### 1. DbMgr(数据库管理器) **职责**:提供线程安全的异步数据库操作接口 **特性**: - 运行在独立线程,避免阻塞 UI - 基于信号槽的回调机制 - 支持事务操作(ACID 保证) - SQLite 性能优化(WAL、PRAGMA 配置) **核心接口**: ```cpp // 非事务操作 void select(table, fields, condition, callback); void insert(table, values, callback); void update(table, values, condition, callback); void deleteRecord(table, condition, callback); void executeSql(sql, callback); // 事务操作 void beginTransaction(callback); void transInsert(transId, table, values, callback); // ... 其他事务操作 void commitTransaction(transId, callback); void rollbackTransaction(transId, callback); ``` ### 2. PageService(页面服务) **职责**:协调文件操作、标签管理、最近访问等功能 **核心功能**: - 异步文件打开(使用 `TextFileUtils`) - 文件夹批量导入 - 标签的增删改查 - 最近访问记录管理 - 自动保存上次打开的文件 **关键方法**: ```cpp void openFile(const QString& filePath); void openFolder(const QString& folderPath); void loadLabelsForFile(const QUuid& fileId); void updateRecentAccess(const QUuid& fileId); ``` ### 3. SearchService(搜索服务) **职责**:提供文件和内容的搜索功能 **搜索模式**: 1. **Recent 搜索**:关键词、时间范围、组合搜索 2. 内容搜索: - 当前文档搜索 - 所有最近文档搜索 **接口示例**: ```cpp void searchByKeyword(const QString& keyword); void searchByTimeRange(const QDateTime& start, const QDateTime& end); void onSearchTriggered(const QString& str, FindMode mode); ``` ## 数据库设计 ### 表结构 #### file_info(文件信息表) ```sql CREATE TABLE file_info ( file_id TEXT PRIMARY KEY, -- UUID file_name TEXT NOT NULL, -- 文件名 file_path TEXT NOT NULL UNIQUE,-- 完整路径 last_modify TEXT NOT NULL -- 最后修改时间 ); ``` #### label_item(标签表) ```sql CREATE TABLE label_item ( label_id TEXT PRIMARY KEY, -- UUID file_id TEXT NOT NULL, -- 关联文件 label_name TEXT NOT NULL, -- 标签名称 row_number INTEGER NOT NULL, -- 行号 FOREIGN KEY (file_id) REFERENCES file_info(file_id) ON DELETE CASCADE ); ``` #### recent_item(最近访问表) ```sql CREATE TABLE recent_item ( recent_id TEXT PRIMARY KEY, -- UUID file_id TEXT NOT NULL, -- 关联文件 access_time TEXT NOT NULL, -- 访问时间 FOREIGN KEY (file_id) REFERENCES file_info(file_id) ON DELETE CASCADE ); ``` #### last_opened_file(最后打开文件) sql ```sql CREATE TABLE last_opened_file ( id INTEGER PRIMARY KEY DEFAULT 1, -- 单行表 file_id TEXT NOT NULL, FOREIGN KEY (file_id) REFERENCES file_info(file_id) ON DELETE SET NULL ); ``` ### 性能优化 - 文件路径索引:`idx_file_path` - 访问时间索引:`idx_access_time`(降序) - SQLite WAL 模式:提高并发性能 ## 使用方法 ### 基本操作 1. **打开文件**:文件 → 打开(Ctrl+O) 2. **保存文件**:文件 → 保存(Ctrl+S) 3. **新建文件**:文件 → 新建(Ctrl+N) 4. **窗口置顶**:点击状态栏 📌 按钮或 Ctrl+T ### 标签管理 1. 在代码编辑器中右键点击行号 2. 选择"添加标签" 3. 输入标签名称 4. 在右侧标签栏点击可跳转 ### 搜索功能 1. **文件搜索**:在顶部搜索框输入关键词,点击搜索 2. 内容搜索: - 当前文档:使用搜索面板 - 所有文档:切换搜索模式到"所有最近项" ### 文件夹导入 1. 在最近访问列表空白处右键 2. 选择"打开文件夹" 3. 选择包含文本文件的文件夹 ## 构建和运行 ### 环境要求 - Qt 5.12+ 或 Qt 6.x - C++11 或更高版本 - CMake 3.10+(可选) ### 编译步骤 **使用 qmake:** bash ```bash qmake TempPaste.pro make ``` ### 依赖项 - Qt Widgets - Qt Sql - Qt Concurrent(用于异步文件操作) ## 支持的文件格式 - 文本文件:`.txt` - 代码文件:`.cpp`, `.h`, `.c`, `.py`, `.java`, `.js`, `.ts` 等 - 配置文件:`.json`, `.xml`, `.yaml`, `.yml` - 脚本文件:`.sh`, `.bat`, `.ps1` - 文档文件:`.md`, `.markdown`, `.rst` - 二进制文件 ## 快捷键 ``` 功能快捷键 新建文件Ctrl+N 打开文件Ctrl+O 保存文件Ctrl+S 另存为Ctrl+Shift+S 撤销Ctrl+Z 重做Ctrl+Y 窗口置顶Ctrl+T ``` ## 注意事项 1. **编码处理**:文件读写使用 `TextFileUtils::AUTO_DETECT` 自动检测编码 2. **大文件支持**:超过 100MB 的文件会提示用户确认 3. **线程安全**:所有数据库操作自动在独立线程中执行 4. **数据持久化**:标签、最近访问等数据自动保存到 SQLite