完全指南:分层文件夹、星标管理、词典组联动与导入导出)
桌面应用【免费下载链接】goldendict-ngThe Next Generation GoldenDict项目地址https://gitcode.com/gh_mirrors/go/goldendict-ng点击查看免费下载GoldenDict-ng 的收藏夹Favorites是用户管理高频查词条目的核心面板它以「文件夹 词条」的树形结构组织内容支持星标快捷添加/移除、词典组联动激活、拖放整理以及 XML/纯文本导入导出。本文以官方文档 website/docs/ui_favorites.md 为骨架结合仓库源码深入讲解收藏夹的完整用法、活动文件夹机制、组关联规则、持久化格式与底层实现原理读完即可将收藏夹用于个人词库整理、多语言分组查词与跨设备备份迁移。收藏夹面板的入口与基本定位收藏夹Favorites是一个独立的可停靠Dock面板由FavoritesPaneWidget实现其主体是一个基于QTreeView的树形控件见 favoritespanewidget.hh。树中每个节点分为三类Root根、Folder文件夹、Word词条对应TreeItem::Type枚举。面板可以通过主菜单View → Favorites对应ui.favoritesPane-toggleViewAction()显示或隐藏其标题栏固定显示 Favorites: 标签便于在多个停靠面板中快速定位。默认情况下收藏夹被设计为顶层文件夹与词条并列的树状结构你可以完全通过右键上下文菜单手动创建文件夹无需任何配置文件。树形结构与基本操作创建文件夹与词条在收藏面板的空白处或任意条目上右键选择Add folder即可新建文件夹新文件夹默认命名为 New folder若重名则会以时间戳追加命名见addNewFolder实现favoritespanewidget.cc随后会自动进入编辑状态供重命名。词条本身不需要手动添加在查词窗口中点击工具栏上的 ⭐Add to Favorites按钮即可将当前查到的词条加入收藏夹具体逻辑见后文「活动文件夹机制」。收藏面板支持ExtendedSelection多选模式选中条目后按Delete键可批量删除删除前会弹出确认对话框受preferences.confirmFavoritesDeletion选项控制见 config.hh。右键菜单还提供Copy Selected操作将选中的词条以换行符拼接复制到系统剪贴板copySelectedItemsfavoritespanewidget.cc若选中的是文件夹则递归收集其下全部词条文本。拖放整理词条与文件夹都可以通过直接拖放在树中移动或复制模型层实现了mimeData/dropMimeData内部使用自定义 MIME 类型application/x-goldendict-tree-items定义于 favoritespanewidget.hh树视图开启了DragDrop拖放模式并默认使用Qt::MoveAction。拖放时模型会做两项合法性检查favoritespanewidget.cc不能将条目拖入其自身或后代文件夹haveAncestor检查防止循环嵌套目标位置已存在同名同类型条目时Move 操作会被拒绝haveSameItem检查避免树内重复。从源码结构看拖放同时支持MoveAction与CopyAction因而既可以把条目移动归类也可以复制一份到其他文件夹。星标按钮与「活动文件夹」机制工具栏上的 ⭐ 图标是整个收藏功能的快速入口它的行为取决于当前「活动文件夹active folder」的状态默认状态无活动文件夹⭐ 只反映词条是否存在于最顶层根目录。此时词条已在顶层收藏⭐ 显示为点亮状态源码中使用star.svg与激活态star_blue.svg两套图标见 mainwindow.cc 与 icons 目录下的 star.svg、star_blue.svg。激活某个文件夹后⭐ 的语义切换到该文件夹——它指示当前查词是否在该文件夹内点击 ⭐ 则执行切换toggle已存在则从该文件夹移除不存在则加入。这个有则删、无则加的逻辑由addRemoveWordInActiveFav实现favoritespanewidget.cc它先通过isWordPresentFullPath判断存在性再分别调用removeWordFullPath或addNewWordFullPath。如何激活文件夹在收藏树中选中某个文件夹后右键菜单会出现两项动态选项Activate folder将该文件夹设为活动文件夹Deactivate folder取消激活若该文件夹当前正是活动文件夹菜单项会自动切换文案见showCustomMenu与folderActivationfavoritespanewidget.cc。激活状态在界面上有直观反馈活动文件夹的图标会从普通文件夹 folder.svg 切换为高亮的激活态图标:/icons/folder_active见data()的Qt::DecorationRole分支favoritespanewidget.cc。同时程序通过GlobalBroadcaster::isWordPresentedInFavorites把当前词是否已在活动文件夹中暴露给主窗口用于实时刷新星标状态mainwindow.cc。词典组与收藏文件夹联动收藏夹与**词典组Group**深度集成每个词典组可以关联一个收藏文件夹Group::favoritesFolder字段见 config.hh。其效果是切换组时关联文件夹被自动激活主窗口在切换词典组时调用trySetCurrentActiveFav(igrp-favoritesFolder.split(/))把组的favoritesFolder按/拆分为路径并尝试激活mainwindow.cc。若对应文件夹不存在则激活失败并保持原状。简单用法直接填写一个已有文件夹的名字例如food。嵌套文件夹使用/作为路径分隔符例如english/food/spicy、spanish/greetings。源码中TreeItem::fullPath()逐级向上收集节点名称得到完整路径getModelIndexByFullPath则按路径逐层查找文件夹favoritespanewidget.cc。组与文件夹的关联配置在编辑组对话框中完成界面上的 Favorites folder 输入框读写group.favoritesFolder保存时还会把用户误输入的反斜杠\统一替换为正斜杠/edit_groups_widgets.cc保证 Windows 用户习惯的路径写法也能正确解析。这样的设计让「按组查词 按组收藏」成为一条顺畅的工作流例如英语组关联english文件夹、西班牙语组关联spanish/greetings文件夹切换词典组即自动切换收藏目标无需手动反复激活。导入与导出除了在面板内增删条目收藏夹还支持通过上下文菜单或主菜单进行整体导入导出。菜单项Import Favorites与Export Favorites的完整实现位于 mainwindow.ccExport导出可选择保存为**纯文本.txt**或XML.xml文件。导出后状态栏会短暂提示 Favorites export complete。Import导入读取 .txt 或 .xml 文件当前收藏内容将被导入内容整体替换不是合并。导入完成后状态栏提示 Favorites import complete。注意界面在选择导入文件时同时支持*.txt *.xml若选择 TXT 文件则按纯文本解析否则按 XML 解析。重要区别当前版本中XML 格式会保留完整的文件夹层级结构而纯文本格式不会——纯文本导入导出只能表达扁平的词条列表。两种格式的细节XML 格式内部结构与收藏夹的磁盘存储格式一致见storeFolder/addFolderfavoritespanewidget.cc典型结构如下?xml version1.0 encodingUTF-8? root folder nameenglish expanded1 folder namefood headwordapple/headword headwordspicy/headword /folder headwordhello/headword /folder headwordgracias/headword /rootfolder name... expanded0|1文件夹节点expanded属性记录上次展开/折叠状态重启后自动恢复headword词条/headword词条节点文本内容即词条名。纯文本格式则是一行一个词条getDataInPlainText将全部词条按换行符\n连接favoritespanewidget.cc导出时文件会写入UTF-8 BOMEF BB BF以保证在 Windows 记事本等工具中正确显示导入时按换行拆分并忽略空行setDataFromTxtfavoritespanewidget.cc。持久化与底层存储收藏数据并非仅存在于内存中而是持久化为一个独立文件由Config::getFavoritiesFileName()返回路径为用户主目录下的favorites文件config.ccQString getFavoritiesFileName() { return getHomeDir().filePath( favorites ); }该文件是XML 格式与上述导出 XML 同构FavoritesModel构造时通过readData()读取favoritespanewidget.cc自动保存程序按preferences.favoritesStoreInterval默认15 分钟见 config.hh周期性调用saveData()每次变更后模型会标记dirty只有存在未保存改动时才真正写盘saveData使用QSaveFile原子写入favoritespanewidget.cc。偏好设置界面也提供该间隔的配置项修改后即时生效mainwindow.cc容错处理若favorites文件损坏XML 解析失败程序会弹出警告对话框并将损坏文件重命名为favorites.时间戳.bad后重新开始避免启动卡死favoritespanewidget.cc。这意味着你可以把主目录下的favorites文件直接作为备份/迁移的素材或借助「导入导出」功能在不同设备间同步收藏夹结合 便携模式Portable Mode 的目录重定向机制还可让收藏数据随程序目录一起移动。小结与实用建议日常收藏查词时直接点工具栏 ⭐默认收藏到顶层右键激活某个文件夹后则定向收藏到该文件夹。多语言/多场景管理为每个词典组如英语、西语、考研词表创建一个顶层文件夹并在组设置中填写对应文件夹名嵌套用/分隔切换组即自动切换收藏目标。整理拖放移动条目、右键删除Delete 键或复制文件夹可嵌套任意层。备份与迁移用主菜单 Export 导出为XML推荐保留文件夹结构或 TXT仅词条列表导入会整体替换当前收藏操作前请先导出备份。收藏夹的实现代码集中在 favoritespanewidget.cc模型与交互、mainwindow.cc菜单、工具栏与组联动与 config.hh配置项如需二次开发或深挖行为细节可从这三处入手。赞分享桌面应用【免费下载链接】goldendict-ngThe Next Generation GoldenDict项目地址https://gitcode.com/gh_mirrors/go/goldendict-ng点击查看免费下载相关推荐TiXL 渲染导出指南Output Target 输出目标配置文件夹、文件名与自动版本管理TiXL 渲染导出指南Output Target 输出目标配置文件夹、文件名与自动版本管理 TiXLTooll 3的 Render To File 面音视频图形学桌面应用massCode代码片段组织完全指南文件夹、标签与分片管理massCode代码片段组织完全指南文件夹、标签与分片管理 massCode是一款功能强大的开源代码片段管理工具专门为开发者设计帮助您高效组织和管理代码片开发工具桌面应用SumatraPDF 收藏夹Favorites完全指南添加、侧栏、命令面板与工具栏按钮配置SumatraPDF 收藏夹Favorites完全指南添加、侧栏、命令面板与工具栏按钮配置 收藏夹Favorites是 SumatraPDF 内置的文桌面应用文档上一篇深入理解 Dagger TypeScript SDK 的 ErrorID错误对象唯一标识符的类型定义与实战解析下一篇Flower 心跳机制端到端测试指南e2e-serverapp-heartbeat 实战解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考