# QEditor **Repository Path**: zqhcoding/QEditor ## Basic Information - **Project Name**: QEditor - **Description**: QEditor(Editor powered by Qt) is a compact text editor with common functions, such as search, replace, mark, and simple syntax highlighting. - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 2 - **Created**: 2023-01-15 - **Last Updated**: 2026-11-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # QEditor [English](README.md) | 简体中文 QEditor("**Editor** powered by **Q**t"缩写) 是一个基于 Qt 的桌面文本编辑器,定位为"轻量但功能完整"的开发工具。 它不仅支持常规文本编辑,还内置了: - 代码搜索与替换、结果面板(支持内存限制和搜索历史) - 多标签会话自动保存/恢复(支持光标位置恢复) - 文本对比、目录对比 - 十六进制编辑(支持"View as Hex"上下文菜单) - SSH 终端(插件化架构,集成文件浏览器) - 桌面标注与截图 - IR 文件结构分析(Outline / Function Hierarchy / Node Hierarchy) - Markdown / HTML 实时预览 - 大文件编辑器(超过配置阈值时自动激活) - Base64 转换工具 ## 界面 ![QEditor 示例 1](release/demo/example/screenshot_1.png) ![QEditor 示例 2](release/demo/example/screenshot_2.png) ![QEditor 示例 3](release/demo/example/screenshot_3.png) ![QEditor 示例 4](release/demo/example/screenshot_4.png) ![QEditor 示例 5](release/demo/example/screenshot_5.png) ![QEditor 示例 6](release/demo/example/screenshot_6.png) ## 主要功能 ### 1. 文本编辑与导航 - 多标签页编辑,避免同一文件重复打开 - 文件拖拽打开(窗口和编辑区都支持) - 支持从命令行或文件管理器打开多个文件 - 行号、状态栏(Ln/Col/Pos/Lines/Length) - 缩放(Zoom In/Zoom Out) - 自动检测外部文件变化并提示重载 - 跳转历史(Step Back / Step Forward) - 可选显示空格、制表符、换行等特殊字符 - **URL 和邮箱链接导航**:Ctrl+Click 在浏览器/邮件客户端中打开链接 - **缩进参考线**:可配置样式(实线/虚线/点线)、间隔、自定义颜色 - 重新打开标签页时恢复光标位置 - 支持自定义标签页名称(通过右键菜单) - "View as Hex" 上下文菜单,快速查看十六进制 - "Hex Open Recent" 功能 - 当前行高亮样式:边框线 / 背景色(可在偏好设置中配置) #### 大文件编辑器 对于超过配置阈值(默认:5MB)的文件,QEditor 自动启用专用编辑器: - 分片存储,避免将整个文件加载到内存 - 完整编辑支持:撤销/重做、复制/粘贴、删除 - 搜索/替换(支持范围限定) - 行号和滚动条高亮标记(显示搜索匹配位置) - 特殊字符可视化(空格、制表符、换行符) - CRLF 显示为独立的 "CR" 和 "LF" 标记 - 缩进参考线支持 - 可选文本换行(可在偏好设置中配置) - 多光标/列模式支持 - 列模式编辑支持输入法(IME) - 光标闪烁动画 - 词级键盘导航(Ctrl+Left/Right、双击) ### 2. 搜索、替换与标记 - 查找/替换(普通、扩展、正则) - 大小写、全词、方向、循环搜索控制 - `Find All in Current`:当前文件全量命中列表 - 搜索结果停靠面板,支持双击跳转、结果复制、结果清理 - 关键字标记(Mark/Unmark)和一键清除 - 滚动条命中位置高亮(搜索、标记、差异等) - 标记文本前景色,统一的颜色管理 - **选区内搜索**:限定搜索/替换范围在选中的文本区域,视觉高亮显示搜索范围 - 可配置内存限制,防止大文件搜索时OOM - 搜索历史跨会话持久化 - 搜索面板可见性状态保存/恢复 - 优化线程池,提升并行搜索稳定性 #### 文件名搜索 - 专用停靠面板,支持在目录中按名称搜索文件 - 可搜索当前目录或递归搜索子目录 - 支持文件名模式匹配(通配符) - 结果以树形视图显示,包含文件路径和大小 - 双击在新区中打开文件 - 路径输入支持 Tab 补全和验证 #### 文件内容搜索 - 在目录中跨多个文件搜索内容 - 并行搜索,支持配置线程数 - 匹配结果高亮显示 - 点击结果跳转到文件中的匹配行 - 可配置内存限制,防止大目录搜索时OOM - 搜索历史跨会话持久化 ### 3. 多光标与列选择 - 默认启用列模式能力 - `Alt + Click`:添加多光标 - `Alt + Drag`:矩形区域选择 - `Alt + Shift + Arrow`:按列扩展/增加光标 - 大文件编辑器也支持多光标/列模式(针对超过阈值的大文件) - 列模式编辑支持输入法(IME) - 撤销/重做时保持多光标状态 ### 4. 语法高亮与文件类型 当前内置语法高亮主要覆盖: - C/C++(`.c`, `.cc`, `.cpp`, `.h`) - Python(`.py`) - MindIR/IR(`.ir`, `.dat`) - Markdown(`.md`) - HTML(`.html`, `.htm`) - 普通文本(`.txt`) ### 5. Markdown / HTML 双栏预览 - Markdown 或 HTML 文件自动进入分栏模式 - 支持左右/上下布局 - 支持"预览在前"或"编辑在前" - 分栏尺寸与布局可持久化 ### 6. 对比工具 #### 文本对比(Text Compare) - 双文件并排对比 - 差异块导航(Next/Prev Section) - 全量/仅差异/仅相同过滤 - Context 模式 - 区块级合并(左右拷贝差异块) - 差异地图(Diff Map) - 支持比较并显示行尾符号 - 改进 CR 行尾支持 - 保存时保留原始行尾格式 - **渲染方法**:ExtraSelections / FormattedText(可在偏好设置中配置) - 设置按钮:直接跳转到对比偏好设置 #### 目录对比(Folder Compare) - 左/中/右三列联动视图(左路径、状态、右路径) - 过滤模式:All / Diffs / Same - 差异细分过滤(含孤儿文件控制) - 批量复制(左到右 / 右到左) - 批量删除 - 窗口状态跨会话持久化 #### 标签页快速 Diff - 标签右键可选择"View Diff between..." - 支持与前一个选中的文件快速比较 #### 文件管理器上下文菜单集成 将对比功能集成到 Linux 文件管理器的右键菜单: - 支持的文件管理器: - Dolphin(KDE) - Thunar(Xfce) - Nautilus(GNOME) - Nemo(Cinnamon/Mint) - Deepin(DDE,支持旧版和 Deepin 23+) - 操作:"Select left to compare" 和 "Compare with selected" - 在偏好设置 > 对比 > "添加对比到文件管理器上下文菜单" 中启用/禁用 ### 7. 十六进制编辑(Hex Open) - 二进制文件十六进制视图与 ASCII 区联动 - 支持插入/替换模式 - 支持撤销/重做、复制/粘贴、删除 - 光标地址状态显示 ### 8. SSH 终端 - 内置 SSH 终端标签页 - 独立 Qt 插件架构(SSH backend plugin) - 与文件浏览器集成:统一视图支持 SSH 和本地文件 - 远程文件浏览器(RemoteExplorerTreeView)支持表头、排序、文件图标和主题 - 支持 `ssh` 命令串解析(含 `-p` 和 `ProxyCommand`) - 支持 ANSI 转义序列渲染(颜色、光标控制、清屏等) - ANSI 颜色主题自适应,深色主题对比度更好 - 终端会话可参与会话恢复 - 支持 SSH 终端自定义标签页名称 #### 终端时间戳侧边栏 - 在每行输出前显示 `[HH:mm:ss]` 时间戳 - 可配置位置(行号左侧或右侧) - 主题自适应样式 - 在偏好设置 > 终端 中启用 #### SSH 会话历史与克隆 - 最近 SSH 会话菜单(工具 > Recent SSH Sessions) - 从历史记录快速重连 - 克隆会话:右键终端标签页复制连接 - 本地终端克隆:在相同工作目录打开新终端 #### 本地终端 - 本地终端标签页(Shell 集成) - Windows:可配置 Shell(PowerShell / cmd.exe / PowerShell Core) - 显示/隐藏行号(可配置) ### 9. IR 结构分析(MindIR 相关) 针对 IR 文件,支持: - Outline 面板:函数列表与返回值 - Function Hierarchy:函数调用关系图 - Node Hierarchy:函数内部节点依赖图 - 图中双击节点可跳转到源码位置 - Ctrl 悬停/点击跳转提示(函数与变量) ### 10. 桌面绘图与截图工具 - 桌面绘图(画笔、直线、矩形、圆、箭头、文本、橡皮) - 区域截图、拖拽调整、边框缩放 - 绘图结果可保存或复制到剪贴板 - 主题自适应工具栏样式 - 截图绘图工具栏添加撤销/重做功能 - 文本输入改进:透明背景、自动调整宽度、位置对齐 - 截图自动保存设置(可配置路径和文件名格式) - 自定义截图选框边框颜色 - 绘图模式橡皮擦使用 CrossCursor - 浮动工具栏 UI 优化 - 可选全局快捷键: - `Ctrl + 1`:截图(原 Alt+F1 已变更) - `Ctrl + \``:桌面绘图 ### 11. 主题与界面定制 - 24 种内置主题,包括 Light、Dark、Solarized、OneLight、TomorrowNightBlue 等 - 主题菜单支持 hover 延时预览 - 编辑器字体、背景色、窗口透明度、对话框透明度 - 工具栏、资源管理器、Outline、Hierarchy 显示控制 - 中英文界面切换 - 加载 Qt 基础翻译文件(用于上下文菜单和标准对话框) - 所有偏好设置组件均有工具提示 - 工具栏默认可见,改进的选中状态图标外观 - 远程文件浏览器主题支持 - 偏好设置对话框专属配色方案 - 延迟隐藏部件样式更新,提升性能 #### 滚动条自动隐藏 - 空闲时自动隐藏滚动条 - 滚动或鼠标悬停时显示 - 可配置超时时间(1000-10000ms,默认 2000ms),在偏好设置 > 外观 中设置 - 颜色动态适应主题变化 #### CJK 字符备用字体 - 为编辑器主字体不支持的字符提供备用字体 - 默认:Noto Serif Mono CJK SC(Linux)/ Noto Serif SC(Windows) - 在偏好设置 > 编辑器和视图 中配置 #### 标签切换弹窗 - Ctrl+Tab / Ctrl+Shift+Tab:快速切换打开的标签页 - 弹窗显示所有标签页,带关闭按钮 - 可配置透明度(10-100%),在偏好设置 > 外观 中设置 - 主题自适应样式 - 非激活项悬停背景 ### 12. 会话与单实例 - 自动保存标签页与内容快照 - 启动恢复上次会话(含懒加载恢复) - 单实例运行:重复启动会复用已有窗口,并可向已运行实例传文件路径 - Windows Shell 启动和单实例 IPC 支持 Unicode 文件路径 ### 13. 工具集 #### Base64 转换器 - 将 UTF-8 文本编码为 Base64 - 将 Base64 解码为 UTF-8 文本 - 交换输入/输出内容 - 复制结果到剪贴板 - 工具菜单 > "Base64 Converter" ## 快捷键(常用) - `Ctrl + O`:打开文件 - `Ctrl + S`:保存 - `Ctrl + H`:替换 - `Ctrl + F`:查找 - `F3` / `Shift + F3`:下一个/上一个匹配 - `Ctrl + G`:跳转行 - `Ctrl + A`:全选 - `Alt + Left` / `Alt + Right`:跳转历史后退/前进 - `Shift + F8`:标记/取消标记 - `Ctrl + Shift + F8`:清除全部标记 - `Ctrl + P`:显示/隐藏资源管理器 - `Ctrl + J`:显示/隐藏 Outline - `Ctrl + L`:显示/隐藏 Hierarchy - `Ctrl + ,`:打开偏好设置 - `Ctrl + Tab`:标签切换弹窗(向前) - `Ctrl + Shift + Tab`:标签切换弹窗(向后) - `Ctrl + 1`:截图 - `Ctrl + \``:桌面绘图 ## 构建环境 ### 依赖 - Qt 6.10.2(建议路径:`~/Qt/Qt6.10.2`) - C++17 编译器 - `qmake` + `make` - Linux 下通常还需要: - `libssh`(用于 SSH 终端) - `X11` 开发库(QHotkey X11 后端) ### Linux Qt 插件 - 打包中包含 fcitx5 中文输入法支持 - 包含 ibus 和 compose 平台输入上下文插件 ### 第三方组件 - `third_party/QHotkey`(全局快捷键支持) - `third_party/libssh`(SSH 库) - `diff_match_patch`(项目内源文件) - SSH 后端插件(独立 Qt 插件项目,位于 `plugins/sshbackend`) ## 编译与运行(推荐 out-of-source) 为避免在仓库根目录产生临时构建文件,建议在单独目录下构建。 ```bash mkdir -p build cd build # 按你的本机 Qt 安装路径调整 qmake ~/Qt/Qt6.10.2/gcc_64/bin/qmake ../QEditor.pro make -j"$(nproc)" ./QEditor ``` 如果你的 `qmake` 路径不同,可先定位: ```bash find ~/Qt/Qt6.10.2 -name qmake -type f ``` ## 命令行使用 可直接传入多个文件路径: ```bash ./QEditor /path/to/file1 /path/to/file2 ``` 支持从命令行或文件管理器打开多个文件。 若 QEditor 已在运行,新的启动请求会把文件发送给已有实例打开。 ## 配置与数据存储 - Linux 默认应用数据目录:`~/.config/QEditor/.Q/data/internal/.files/` - 主要内容包括: - `.config.ini`:配置 - `.auto_save/`:会话/自动保存数据 - `.recent_files/`:最近文件 - `.recent_compare_sessions/`:最近文件夹/文本比较会话(已从 config.ini 迁移) - `.recent_ssh_sessions/`:最近 SSH 连接(已从 config.ini 迁移) - `.search_targets/`:搜索历史 ## 目录结构(源码) - `src/common` / `include/common`:配置、常量、单实例、工具类 - `src/view` / `include/view`:主窗口、编辑器、对话框、比较器、终端、桌面工具 - `LargeFileEditView`:大文件编辑器组件 - `LargeTextDocument`:分片表实现(用于大文件) - `AutoHideScrollBarFilter`:滚动条自动隐藏事件过滤器 - `Base64ConverterDialog`:Base64 转换器对话框 - `PathLineEdit`:路径输入组件(支持 Tab 补全) - `CustomKeySequenceEdit`:快捷键编辑组件 - `include/view/plugin`:终端后端插件接口(ITerminalBackend、ITerminalBackendPlugin、IRemoteExplorer、TerminalBackendPluginManager) - `plugins/sshbackend`:SSH 后端插件(独立 Qt 插件项目 - SshClient、RemoteExplorerTreeView) - `src/file` / `include/file`:编码、最近文件、会话记录 - `RecentCompareSessions`:比较会话管理 - `RecentSshSessions`:SSH 会话管理 - `src/parser` / `include/parser`:IR 解析接口与实现 - `src/hierarchy` / `include/hierarchy`:函数/节点层级图 - `src/theme` / `include/theme`:主题系统(24 种内置主题) - `src/diff` / `include/diff`:Diff 逻辑 - `src/win` / `include/win`:Windows 特定主题集成 ## 已知说明 - Outline / Hierarchy 目前主要针对 IR 文件生效。 - 为保证性能,超大文件会限制部分解析/高亮能力。 - 大文件编辑器在文件超过配置阈值时自动激活。 - 关于对话框显示 Git 提交哈希和构建时间戳,便于版本追踪。 ## 性能优化 - EditView 绘制性能优化:缓存颜色、字体和设置 - 主题切换优化:混合重新高亮方案 - 延迟隐藏部件样式更新 - 特殊字符渲染性能改进 - 偏好设置应用仅保存已更改的设置 ## 开发建议 - 使用项目根目录 `.clang-format` 统一格式 - 先阅读 `AGENTS.md` 里的开发约定 - 目前无完整自动化测试,建议按场景手动验证 ## 许可证 本项目采用 Apache License 2.0。 - 主许可证:`LICENSE` - 其它第三方组件请参考对应目录下许可证文件 ## 项目地址 - Gitee: https://gitee.com/zqhcoding/QEditor