Markdown编辑器
想法
咕咕咕
库
Qt+cmark-gfm
包管理依旧vcpkg(那我还装Qt干嘛,算了部分依赖吧)
设计
基本就看着typora来写
模式一:代码模式 (编辑模式)
- 主控件:
QPlainTextEdit - 核心功能:
- 语法高亮: 使用
QSyntaxHighlighter子类,为不同的 Markdown 元素(如# Header,**bold**,code)设置不同的文本格式(颜色、字体粗细等)。 - 简易渲染: 这可以理解为“所见即所得”的轻度增强。
- 你可以通过修改
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函数写成答辩了)
代码已经开源, 仓库地址