可以参考该文章:QTextBlockFormat、QTextListFormat - 程序员大本营
核心知识如下:
- 如果想开发一个富文本编辑器(html,markdown等常见格式),Qt已经为用户完成了几乎所有与编辑有关的具体工作,我们所要做的就是运用合适的类,调用合适的函数接口。可以参考qtcreator的例子列表里,参考qtextedit那个例子,非常全了,功能比肩一般的笔记撰写软件了。
- 采用QTextEdit作为输入文本的容器,在它里面输入的可编辑文本由QTextDocument作为载体,而QTextBlock、QTextList、QTextFrame等则用来表示QTextDocument的元素,也可理解为QTextDocument的不同表现形式,可能为字符串、段落、列表(QTextList)、表格或是图片等。
- 每种元素都有自己的格式,这些格式则用QTextCharFormat、QTextBlockFormat、QTextListFormat、QTextFrameFormat等类相对应来描述与实现。例如,QTextBlockFormat类对应于QTextBlock类,QTextBlock类用于表示一块文本,一般可以理解为一个段落,但并不只指段落,QTextBlockFormat类则用于表示这一块文本的格式,如缩进值、与四边的边距等。
类列表:(qtextcursor.h文件里)
class QTextCharFormat;
class QTextBlockFormat;
class QTextListFormat;
class QTextTableFormat;
class QTextFrameFormat;
class QTextImageFormat;
class QTextList;
class QTextTable;
class QTextFrame;
class QTextBlock;
各类之间的划分与关系可用下图进行描述:
- 从上图可知,QTextCursor类是一个非常重要也经常会用到的类,它用于表示编辑文本中的光标。这个类提供了对QTextDocument文档的修改接口,所有对文档格式的修改,说到底都与光标有关,如改变字符的格式,指的是改变光标处字符的格式;改变段落的格式,指的是改变光标所在段落的格式,因此,QTextCursor类在文档编辑类程序中有着重要的作用,所有对QTextDocument的修改能够通过QTextCursor类实现。
- 各类的继承关系如下:
- 文档框架结构
框架(QTextFrame)
文本块(QTextBlock)
表格(QTextTable)
列表(QTextList)
- 每种元素有相应的format类控制和表示
框架(QTextFrameFormat)
文本块(QTextBlockFormat)
表格(QTextTableFormat)
列表(QTextListFormat)
每个文档始终包含一个根框架,并且始终包含至少一个文本块(可能为空文本块)
其它参考文献:Qt 6: 1-7 富文本处理器_稀羽18的博客-CSDN博客