Qt文本系统(1):基本理论

Qt文本系统(1):基本理论

若对C++语法不熟悉,建议参阅《C++语法详解》一书,电子工业出版社出版,该书语法示例短小精悍,对查阅C++知识点相当方便,并对语法原理透彻、深入详细的讲解。

11.1.1 文档的基本分类

富文本就是指的符合HTML语言规范的文本。Qt的富文本文档是指由段落、框架、表格、列表、HTML等组成的文本,因此范围更广。
文档(document)、文本(text)、段落(paragraph)、字符(char)、文档元素(文档对象)
 文档由文本组成,文本由段落、文档元素组成,段落由字符组成。
 文档元素:文档(document )除了可以包含纯文本外,还可包含表格、列表、图像等其他对象,这些对象被称为文档元素。
 段落(paragraph):理论上来讲,一个段落可以包含表格、列表、字符、图像等内容,但实际实现时可能只会包含纯文本。
11.1.2 Qt对文档的描述

1、文本片段简称片段(fragment)
文本片段是指在一文本块中具有相同属性的一部分字符的集合。
2、文本块简称块(block),见图11-2
块由换行符分隔,在文本编辑器中每按一次Enter键就产生一个文本块,即使该块什么内容也没有。注意:自动换行产生的换行不会形成一个文本块(因为不是由换行符分隔的)。
文本块将具有不同字符格式的文本片段组合在一起,并用于表示文档中的段落(即文本块就是段落,因此这两个概念是相同的)。因此文本块包含一个或多个文本片段。
文本块在Qt中用于分隔其他文档元素,由于这个原因,文本块不能包含表格、框架等对象
在这里插入图片描述

3、文档对象(文档元素):
Qt的文档通常由常见的文档元素组成,即文本块、框架、表格和列表、图像等。在Qt中,每种文档元素都使用一个类进行描述,比如QTextTable类用于描述一个表格文档元素,由于这些类大多继承自QTextObject类,因此文档元素也被称为文档对象。
4、框架(frame)
框架就是一个带边框的矩形,框架提供了文档各部分之间的逻辑分离,框架中可以包含文档的所有文档元素,也就是说框架中可以含有文本块、框架自身(即框架可嵌套)、表格、列表、图像、HTML等。
5、表格(table)
表格是一种特殊类型的框架,由许多单元格组成,每个单元格可以包含更多的框架、文本块、表格等,也就是说表格也可以嵌套。
6、图像(image):
图像与文档中的其他文档元素不同,图像由特殊格式的文本片段表示。这使得图像可以与周围的文本排成一行。

11.1.3 Qt文档的组织结构(见图11-3)
在这里插入图片描述
每个文档都包含一个根框架,除根框架之外的所有框架都具有父框架。
每个框架必须至少包含一个文本块(即使该文本块是空的),以使文本光标可在其中插入新的文档元素。
即使文本块不含任何信息,框架和表格也总是由文本块分隔开来,这确保了可以在结构之间插入新元素由以上规则可见,每个框架至少包含一个文本块,以及零个或多个子框架。框架和表格主要用于对其他结构进行分组,而文本块才是实际上显示的信息。
图11-4是Qt文档的实际结构。
在这里插入图片描述

11.1.4 Qt文档的实现
每种文档元素Qt都使用一个类进行描述,比如QTextTable、QTextBlock等。
每种文档元素的格式(大多是外观)Qt都使用一种相对应的格式类进行描述,比如QTextTable使用QTextTableFormat类来描述其格式,这些描述格式的类都继承自QTextFormat类,本文把描述文档元素格式的类称为格式对象或格式类。
1、QTextDocument类:
现实中,不同的文档元素存储在一个文档中,因此,需要把使用由各种类描述的文档对象,使用一个类来统一存储,这个类就是QTextDocument,该类可以容纳各种文档元素,因此QTextDocument是文档元素的一个容器。
由以上原理可见,要编辑文档,首先需要创建一个QTextDocument对象,然后把设计好的其他文档元素(文档对象)添加到QTextDocument对象中。
因为QTextDocument在大多数情况下仅仅是作为一个容器,在其他章节只需知道怎样获取QTextDocument以及怎样把文档元素添加到QTextDocument中即可。因此本文会把QTextDocument和QTextCursor类放在比较靠后的章节进行讲解
2、编辑文档(QTextCursor类)
虽然QTextDocument类是用来描述文档的,但是该类并不直接提供对文档元素修改的接口(API),也未提供添加其他文档元素(除HTML外)的接口,因此要修改或向QTextDocument中添加文档元素,需要使用另一个类QTextCursor来完成。
QTextCursor类主要用于管理插入符(也称为光标),还能够把表格或列表等复杂对象插入到QTextDocument中,并处理选择。该类可以创建/删除选择、并检索文本的内容。
3、显示文档
在QTextDocument类中的内容编辑好之后需要显示出来,有两种方法可显示QTextDocument中的内容。如下
1)、直接输出到文件,比如将QTextDocument输出为PDF、odt、ps、HTML等文件。使用这种方式显示QTextDocument文档是完全以编程的方式编辑的QTextDocument文档,不够直观。
2)、使用QPlatinTextEdit或QTextEdit类来显示QTextDocument的内容并以所见即所得的方式进行编辑,但是除纯文本外,图像、表格等元素,还是需要以编程的方式进行编辑。注意:QPlatinTextEdit或QTextEdit类默认拥有一个内置的QTextDocument对象,使用这两个类时就是在编辑这个内置的QTextDocument对象。

4、Qt文档编辑的具体流程见图11-5
在这里插入图片描述

本文作者:黄邦勇帅(原名:黄勇)

猜你喜欢

转载自blog.csdn.net/hyongilfmmm/article/details/83099841