MarkDown编辑器的设计

Markdown编辑器

想法

咕咕咕

Qt+cmark-gfm

包管理依旧vcpkg(那我还装Qt干嘛,算了部分依赖吧)

设计

基本就看着typora来写

  • 模式一:代码模式 (编辑模式)

    • 主控件QPlainTextEdit
    • 核心功能
      1. 语法高亮: 使用 QSyntaxHighlighter 子类,为不同的 Markdown 元素(如 # Header, **bold**, code)设置不同的文本格式(颜色、字体粗细等)。
      2. 简易渲染: 这可以理解为“所见即所得”的轻度增强。
        • 你可以通过修改 QTextDocument 的样式,让标题显示得更大更粗,让图片链接显示一个占位符图标等。
        • 但这仍然在一个可编辑的文本控件中完成,并非真正的 HTML 渲染。Qt 的富文本能力足以实现不错的“简易渲染”效果。
  • 模式二:预览模式 (阅读模式)

  • 架构: 使用 QSplitter 水平分割窗口。

    • 左侧QPlainTextEdit (代码模式用的同一个控件)。
    • 右侧QWebEngineView

架构

我采用 Model-View-Presenter (MVP)Model-View-ViewModel (MVVM) 的变体

┌─────────────────────────────────────────────────┐
│                   表现层 (View)                  │
├─────────────────────────────────────────────────┤
│ 主窗口 (MainWindow)                             │
│  ├─ 编辑器视图 (EditorView) - QPlainTextEdit    │
│  ├─ 预览视图 (PreviewView) - QWebEngineView     │
│  ├─ 工具栏、菜单栏等                            │
│  └─ 视图接口 (IView)                            │
├─────────────────────────────────────────────────┤
│                   presenter层                   │
├─────────────────────────────────────────────────┤
│ 编辑器Presenter (EditorPresenter)               │
│  ├─ 处理视图事件                                │
│  ├─ 协调模型操作                                │
│  └─ 更新视图状态                                │
├─────────────────────────────────────────────────┤
│                   模型层 (Model)                │
├─────────────────────────────────────────────────┤
│ 文档模型 (DocumentModel)                        │
│  ├─ 原始Markdown内容                            │
│  ├─ 解析后的HTML内容                            │
│  └─ 文档元数据                                  │
│  Markdown解析器 (MarkdownParser)                │
│  语法高亮器 (SyntaxHighlighter)                 │
│  文件操作器 (FileManager)                       │
└─────────────────────────────────────────────────┘

好耶是新架构, 说实话感觉我都没接触到MVC架构的精髓

不过我自己基本没什么用成型架构编写过Qt应用(其实也没写过多少Qt), 基本上就是往main函数堆(参考基于Slint和C++的音乐播放器, main函数写成答辩了)

代码已经开源, 仓库地址

平板上Word的, 一点研究
关于最近发生的事