QOwnNotes 是一款开源、跨平台的 Markdown 笔记应用,专为喜欢纯文本标记语言的用户设计。它与云服务(如 Nextcloud、ownCloud)深度集成,支持文件版本管理和笔记加密。
✨ 核心特色:
- 纯文本优先:使用 Markdown + 扩展语法
- 云同步友好:与 Nextcloud/ownCloud/WebDAV 无缝同步
- 本地存储:数据完全掌握在用户手中
- 高度可定制:支持脚本扩展(JavaScript/QML)
- 跨平台:Windows、macOS、Linux
- 标签管理:强大的多层次标签系统
- 版本控制:与 git 集成或使用云版本功能
- 笔记加密:支持 AES-256 加密单个笔记
🔗 源码地址
官方仓库:https://github.com/pbek/QOwnNotes
技术栈:
- C++(核心)
- Qt 框架(GUI)
- CMake(构建系统)
- JavaScript/QML(脚本扩展)
🗺️ 学习路线建议
阶段一:基础使用与理解(1-2周)
-
安装体验
# Linux 示例 sudo snap install qownnotes # 或从源码编译 git clone https://github.com/pbek/QOwnNotes.git -
核心功能掌握
- Markdown 编辑与实时预览
- 标签系统与笔记组织
- 与 Nextcloud 同步配置
- 脚本功能初探
阶段二:源码结构分析(2-4周)
QOwnNotes/
├── src/ # 主程序源码
│ ├── libs/ # 第三方库
│ ├── widgets/ # UI 组件
│ └── windows/ # 主窗口类
├── scripts/ # 内置脚本示例
├── l18n/ # 国际化文件
└── tests/ # 测试代码
重点研究:
MainWindow类:程序入口和主逻辑Note类:笔记数据结构NoteEditor类:编辑器实现
阶段三:模块深入学习(1-2个月)
1. 编辑器模块
- Markdown 解析与渲染
- 语法高亮实现
- 实时预览机制
2. 同步模块
CloudConnection类- WebDAV 协议实现
- 冲突处理机制
3. 扩展系统
- 脚本引擎架构
- JavaScript/QML 桥接
- API 接口设计
阶段四:实战与贡献(长期)
新手友好任务:
-
文档改进
- 翻译更新(l18n 目录)
- 使用文档完善
-
Bug 修复
- 从
good first issue标签开始 - 简单的 UI 调整
- 从
-
脚本开发
// 示例:简单的自定义脚本 script.registerCustomAction("hello", "Hello World", function() { script.log("Hello from QOwnNotes!"); });
高级贡献:
-
功能开发
- 新编辑器功能
- 云服务适配器
- 性能优化
-
架构改进
- 代码重构
- 新模块设计
- 跨平台兼容性
🔧 开发环境搭建
Ubuntu/Debian:
# 安装依赖
sudo apt install build-essential qt6-base-dev qt6-tools-dev-tools cmake
# 编译
mkdir build && cd build
cmake ..
make -j$(nproc)
Windows:
- 安装 Qt6 和 CMake
- 使用 Visual Studio 或 MinGW
- 通过 CMake 生成工程文件
📚 学习资源
- 官方文档:https://www.qownnotes.org/
- API 文档:https://www.qownnotes.org/scripting/
- 论坛讨论:https://github.com/pbek/QOwnNotes/discussions
- 代码示例 :查看
scripts/目录的示例脚本
💡 学习建议
- 从用户到开发者:先作为深度用户使用,理解痛点
- 小步快跑:从修改配置、写简单脚本开始
- 阅读现有代码:特别是已解决的 issue 相关代码
- 参与社区:在 GitHub Discussions 提问和分享
🎯 技能要求
必需:
- C++ 基础
- Qt 基本了解
- Git 使用
加分:
-
Markdown 解析器知识
-
云存储协议(WebDAV)
-
JavaScript/QML 经验
-
跨平台开发经验
QOwnNotes 是一个中等规模的开源项目,代码结构清晰,非常适合学习桌面应用开发、跨平台技术和云同步实现。建议按"使用 → 理解 → 修改 → 贡献"的路径逐步深入。