在 Qt C++ 和 QML 中开发一个美观且高性能的块编辑器

主要观点:作者从 scratch 用 Qt C++ 和 QML 开发了跨平台且类似原生的 Daino Notes 块编辑器,介绍了其架构、基本功能(如文本编辑、撤销重做、Markdown 显示等)、高级块(如 Kanban 板、图像)的处理、拖放功能、性能测试(与其他编辑器对比)、美学设计考虑、Qt 许可证、遇到的 bug 以及构建流程等,还提到后续计划推出移动版本并许可块编辑器代码。

关键信息:

  • 用 Qt 开发的原因:现代软件臃肿,Qt 可实现类似原生应用的品质,且 QML 更适合现代 UI 界面创建。
  • 架构:遵循 MVC 架构,数据为本地 SQLite 数据库中的纯文本,模型管理文档结构,视图为 QML ListView 及渲染组件。
  • 基本功能:实现多种文本编辑操作,如光标移动、复制粘贴等,处理 Markdown 显示与底层文本的转换。
  • 高级块:以特定语法保存,可在纯文本中保持有用性,通过复制实现拖放功能。
  • 性能测试:在加载大型文本等方面表现优异,如在 2017 MacBook Air 和 M1 MacBook Air 上的测试结果对比。
  • 美学设计:以 macOS 原生应用为基准,存在一些非原生性的问题待改进。
  • Qt 许可证:误解可静态链接应用,实际 LGPL 允许静态链接。
  • 构建流程:借助开源贡献者开发的系统实现跨平台自动构建。

重要细节:

  • 文本选择实现:借鉴 Shantanu Tushar 的代码,通过指令当前可见委托检查是否选择文本等步骤实现。
  • 撤销重做:用简单结构体保存操作信息,合并单个操作为复合操作以提高效率。
  • 拖放内部实现:在 ListView 中创建拖动块的副本,避免被销毁。外部拖放时创建隐形副本块。
  • 性能优化:利用 QML ListView 的 reuseitems 属性提高滚动性能,可进一步探索其他优化方式。
  • 构建工具:使用 GitHub Actions 配置文件实现跨平台自动构建,如在 Linux 上使用 AppImage 和相关插件,在 macOS 和 Windows 上使用相应工具。
  • 后续计划:发布移动版本,实现自适应 UI,探索更多优化。
  • 块编辑器许可:应开发者和公司需求,提供块编辑器代码许可。
阅读 54
0 条评论