1. 程式人生 > >Qt文本系統(1):基本理論

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
在這裡插入圖片描述

本文作者:黃邦勇帥(原名:黃勇)