富文本文档
新元素的创建和插入可以通过使用 QTextCursor 以编程的方式实现, 或者通过 QTextEdit 以用户可视化编辑的方式实现. 元素可以在创建时指定一个特定的样式, 或者是直接使用当前光标所在位置的样式.
文档的基本结构是: 文档的 "顶层" 决定显示的方式布局. 每一个文档都包括一个根框架(root frame), 以及至少一个文本块. 对于含有多种文本内容的文档, 根框架通常会包含一系列的块和其他元素. 在文档中, 框架和表格的顺序由文本块分隔开. 有时候这些文本块根本没有内容. 这保证了新元素总是能够插进原有结构之间.
QTextDocument 类包含了富文本文档的所有信息. 前面说过, 文档可以用两种方式访问: 方便编辑器使用的线性缓存 (linear buffer) 和方便布局引擎使用的对象层次(object hierarchy). 在层次化文档模型中, 对象用来描述可视元素, 如框架, 表格和列表. 在更低的层次上, 这些元素都有自己的描述属性, 如文本风格和对齐方式. 文档的线性描述则用于编辑和维护文档内容.
虽然 QTextEdit 提供了方便的富文本显示和编辑的功能, 但文档也可以脱离任何一种编辑组件独立使用. 例如:
QTextDocument *newDocument = new QTextDocument;
另外, 也可以通过已有的文本组件获得:
- QTextEdit *editor = new QTextEdit;
- QTextDocument *editorDocument = editor->document();
这种灵活性使得应用程序能够同时操作多个文档, 而不必包含多个文档组件, 也不比要求文档必须存储为某种中间格式.
一个空的文档包含一个根框架, 这个框架包含一个空的文本块. 框架提供不同文档部分的逻辑分割, 同时也提供了在渲染时如何显示的属性. 一个表格就是一个特化的框架, 包含分布在不同行和列的多个单元. 每个单元都能够包含更多的结构和文本. 表格提供了灵活配置单元的管理和布局的特性.
文本块包含文本片段. 每一个文本片段都有特定的文本和字符格式信息. 文本属性在字符级别和块级别定义. 在字符级别可以指定字体, 颜色和大小. 在块级别可以指定更高一级的行为, 例如文本流方向, 对齐方式和背景色.
文档结构并不是直接维护的, 而是需要通过基于光标的接口进行编辑. 文档光标接口会自动向根框架插入新的文档元素, 并且确保这个元素在必要时有一个适合的空块.
我们可以通过以下方式访问到根框架:
- QTextDocument *textDocument;
- QTextFrame *root = textDocument->rootFrame();
当需要进行文档结构导航时, 有时候可以从根框架开始. 因为根框架提供了访问整个文档结构的能力.
来源: http://www.bubuko.com/infodetail-2658399.html