前言
Qt的富文本处理使用了Scribe框架,提供一组用于读取和操作结构化富文本文档(RTF)的类。 与以前的Qt支持富文本不同,新类围绕QTextDocument类而不是原始文本信息。 这使开发人员无需创建中间标记格式的内容就可以创建和修改结构化的RTF文档。
Qt 使用QTextDocument 类来存储RTF,使用 QTextCursor 类来编辑RTF,
Qt中对富文本的处理分为 编辑 操作和 只读 操作两种方式 :
- 编辑操作是使用基于光标的一些接口函数,这样更好的模拟了用户的编辑操作,更加容易理解,而且不会丢失底层的文档框架。主要基于QTextCursor类
- 对于文档结构的概览,使用了只读的分层次的接口函数,它们有利于文档的检索和输出。主要基于QTextDocument类
补充说明:
Scribe框架 : 用于Web平台的富文本编辑器框架。
各种富文本/ HTML编辑器和框架比较
富文本处理分为多个部分,便于参考:
- 富文本文档结构概述了QTextDocument 中的不同类型的元素,并描述了它们在文档结构中的排列方式。
- QTextCursor 接口解释了如何使用基于游标的界面编辑富文本文档。
- 文档布局简要说明了文档布局的作用。
- 常见富文本编辑任务 考察了一些涉及阅读或操作富文本文档的常见任务。
- 高级富文本处理 考察高级富文本编辑任务。
- 支持的 HTML 子集列出了QTextDocument 支持的 HTML 标记。
用于富文本处理的API
Qt 提供了用于分析、呈现操作和编辑富文本的类集合。
类 | 说明 |
---|---|
相关类 | |
QFont | 指定用于绘制文本的字体的查询 |
QSyntaxHighlighter | 允许您定义语法突出显示规则,此外,您可以使用 类查询文档的当前格式或用户数据 |
QTextLength | 封装 QTextDocument 中使用的不同类型的长度 |
QTextOption | 常规富文本属性的描述 |
富文本编辑或显示的控件 | |
QPlainTextEdit | 用于编辑和显示纯文本的小工具 |
QTextBrowser | 包含超文本导航的富文本浏览器 |
QTextEdit | 用于编辑和显示纯文本和富文本的小工具 |
文本文档和文本光标 | |
QTextDocument | 保留格式化的文本 |
QTextCursor | 提供用于访问和修改 QTextDocuments 的 API |
元素和格式的基类 | |
QTextObject | 不同类型的对象的基类,这些对象可以将 QText 文档的某些部分分组在一起,元素父类 |
QTextFormat | QText 文档的格式信息,元素格式父类 |
框架部分 | |
QTextFrame | 表示 QTextDocument 中的框架 |
QTextFrame::iterator | 用于读取 QTextFrame 内容的器 |
QTextFrameFormat | QTextDocument 中框架的格式信息 |
文本块部分 | |
QTextBlock | QTextDocument 中文本片段的容器 |
QTextBlock::iterator | QTextBlock::iterator 类提供了一个用于读取 QTextBlock 内容的读取器 |
QTextBlockFormat | QTextDocument 中文本块的格式信息 |
QTextBlockGroup | QTextDocument 中文本块的容器 |
QTextBlockUserData | 用于将自定义数据与文本块关联 |
表格部分 | |
QTextTable | 表示 QText 文档中的表 |
QTextTableFormat | QTextDocument 中表的格式信息 |
QTextTableCell | 表示 QTextTable 中单元格的属性 |
QTextTableCellFormat | QTextDocument 中表单元格的格式信息 |
列表部分 | |
QTextList | QTextDocument 中项目的修饰列表 |
QTextListFormat | QTextDocument 中列表的格式信息 |
文本片段部分 | |
QTextFragment | 使用单个 QTextCharformat 在 QText 文档中保存一段文本 |
QTextCharFormat | QTextDocument 中字符的格式信息 |
图像 | |
QTextImageFormat | 在 QTextDocument 中格式化图像的信息 |
布局部分 | |
QAbstractTextDocumentLayout | 用于实现 QTextDocuments 自定义布局的抽象基类 |
QTextInlineObject | 表示 QAbstractTextDocumentLayout 及其实现中的内联对象 |
QPlainTextDocumentLayout | 实现 QTextDocument 的纯文本布局 |
控件布局 | |
QTextLayout | 用于布局和呈现文本 |
QTextLine | 表示 QTextLayout 中的一行文本 |
文档辅助类 | |
QTextDocumentFragment | 表示 QTextDocument 的一段格式化文本 |
QTextDocumentWriter | 用于将 QText 文档写入文件或其他设备的与格式无关的接口 |
用于富文本编辑的控件
- QTextEdit:富文本编辑器,支持html显示,可以用sethtml/tohtml进行html文本操作或使用,也可利用setPlainText、toPlainText进行纯文本操作
- QTextBrowser:继承于QTextEdit,仅提供显示功能,并提供了超文本导航功能,如果不需要超文本连接只需要使用QTextEdit并设置QTextEdit::setReadOnly
- QPlainTextEdit:纯文本编辑器,不算富文本编辑器。但是也使用基于QTextDocument的存储 和基于QTextCursor操作的方式。
官方示例
QTextDocument 官方范例:
-
Application Example :应用程序示例展示了如何实现具有菜单、工具栏和状态栏的标准GUI应用程序。示例本身是一个围绕QPlainTextEdit构建的简单文本编辑器程序。
-
code editor Example :创建具有行号并突出显示当前行的简单编辑器
-
Syntax Highlighter Example :语法高亮的例子
-
Text Edit Example:类似于word编辑器的例子
-
Calendar Example :利用富文本编辑器的方式实现日历
-
Order Form Example :根据一些的参数设置生成报表,其实和上面的原理一样
-
Text Finder Example :文本查找
-
Text Object Example :将SVG文件插入QTextDocument。
总结
Qt 使用QTextDocument 类来存储RTF,使用 QTextCursor 类来编辑RTF,QTextEdit、QPlainTextEdit、QTextBrowser是个显示部件,本身只有一些简单的编辑接口,但是也是基于了QTextDocument的存储 和基于QTextCursor操作的操作。
官方文档 Rich Text Processing - Rich Text Processing APIs