Rich Text Processing

一、简述:
文本框架提供了一组类用于读取和处理结构化的富文本文档。不同于以往的富文本支持Qt,新类是围绕QTextDocument类而不是原始文本信息。这使开发人员能够创建和修改结构的富文本文件没有准备一个中间标记格式的内容。
文档中的信息可以通过两个互补的访问接口:一个基于指针的接口用于编辑和一个只读分层界面提供了一个高水平文档结构的概述。基于指针的接口的主要优势是,文本可以使用编辑操作,模拟用户的交互编辑器,而不丧失文档的底层结构。只读分层界面是最有用的在执行搜索和文档导出等操作。
本文档分为章节为方便参考:
Rich Text Document Structure QTextDocument概述了不同类型的元素,并描述了他们是如何安排的文档结构。
The QTextCursor Interface 解释了富文本文档可以使用基于指针的编辑界面。
common Rich Text Editing Tasks 简要解释文档布局的作用。
Advanced Rich Text Processing 研究先进的富文本编辑任务。
Supported HTML Subset 列出QTextDocument支持的HTML标记。

二、Rich Text Processing APIs:
Qt提供了一个广泛的集合类解析、渲染操作和编辑富文本。
QAbstractTextDocumentLayout 抽象基类为QTextDocuments用于实现自定义布局
QFont 指定用于绘制文本的字体
QPlainTextDocumentLayout 实现了一个为QTextDocument纯文本布局
QPlainTextEdit 小部件,用于编辑和显示纯文本
QSyntaxHighlighter 允许您定义语法高亮规则,除了可以使用类来查询当前文档的格式和用户数据
QTextBlock 容器在QTextDocument文本片段
QTextBlockFormat QTextDocument格式化信息的文本块
QTextBrowser 富文本与超文本浏览器导航
QTextBlockGroup 容器在QTextDocument文本块
QTextBlockUserData 用于把定制数据与文本块
QTextCharFormat QTextDocument格式化字符的信息
QTextCursor 提供了一个API来访问和修改QTextDocuments
QTextDocument 持有格式化文本,使用QTextEdit可以查看和编辑
QTextDocumentFragment 代表一块从QTextDocument格式化文本
QTextDocumentWriter Format-independent接口编写QTextDocument文件或其他设备
QTextEdit 小部件,用于编辑和显示平原和富文本
QTextFormat QTextDocument格式化信息
QTextFragment拥有一段文字与单个QTextCharFormat QTextDocument
QTextFrameQTextDocument代表一个框架
QTextFrameFormatQTextDocument格式化信息帧
QTextImageFormatQTextDocument格式化信息的图像
QTextInlineObject代表QTextLayout内联对象
QTextLayout用来制定和呈现文本
QTextLength封装了用于QTextDocument不同类型的长度
QTextLine在QTextLayout代表一行文本
QTextList QTextDocument装饰项目列表
QTextListFormatQTextDocument格式化信息列表
QTextObject基类不同类型的对象可以部分QTextDocument分组
QTextOption一般的富文本属性的描述
QTextTableQTextDocument代表一个表
QTextTableCellQTextTable代表一个细胞的特性
QTextTableCellFormat为表细胞QTextDocument格式化信息
QTextTableFormatQTextDocument格式化信息表
QTextFrame::iterator迭代器阅读QTextFrame的内容
三、常见的富文本编辑任务(Common Rich Text Editing Tasks)
有许多的任务通常是由开发人员在编辑和处理文本文档使用Qt。这些包括使用显示小部件如QTextBrowser QTextEdit,与QTextDocument创建文档,编辑使用QTextCursor和导出文档结构。本文概述的一些比较常见的方式,使用富文本类来执行这些任务,显示方便的模式,可以在您自己的应用程序中重用。

Using QTextEdit
可以构造一个文本编辑器部件,用于显示HTML以下列方式:

QTextEdit *editor = new QTextEdit(parent); 
    editor->setHtml(aStringContainingHTMLtext);
    editor->show();
默认情况下,文本编辑器包含一个文档根结构,里面是一个空的文本块。这个文档可以由应用程序,以便它可以直接修改:
QTextDocument *document = editor->document();

文本编辑器的光标也可以用来编辑一个文档:

 QTextCursor cursor = editor->textCursor();
尽管文档可以使用许多编辑光标,QTextEdit只显示一个光标。因此,如果我们想要更新编辑器显示一个特定的光标或其选择,我们需要设置编辑器的光标后修改了文档:
editor->setTextCursor(cursor);

Seletcting Text
文本通过移动光标选择使用类似的操作由一个用户在一个文本编辑器。选择两个点之间的文本文档,我们需要将光标在第一个点然后它使用一种特殊的模式(QTextCursor::MoveMode)移动操作(QTextCursor::MoveOperation)。当我们选择文本,我们离开选择锚在老光标位置和用户可能一样,按住Shift键选择文本时:

cursor.movePosition(QTextCursor::StartOfWord);
   cursor.movePosition(QTextCursor::EndOfWord,  
   QTextCursor::KeepAnchor);

在上面的代码中,整个词是选择使用这种方法。QTextCursor提供了许多常见的移动操作选择单个字符,词语,线,和整个街区。
Finding Text
QTextDocument提供了一个基于指针的界面搜索,使它容易找到并修改文本风格的文本编辑器。下面的代码发现的所有实例文档中特定的词,和变化的颜色:

 QTextCursor newCursor(document);
 while (!newCursor.isNull() && !newCursor.atEnd())
{
      newCursor = document->find(searchString, newCursor);
      if (!newCursor.isNull())
     {
         newCursor.movePosition(QTextCursor::WordRight,
                                    QTextCursor::KeepAnchor);
         newCursor.mergeCharFormat(colorFormat); 
      }
}

注意光标不需要每次移动搜索和替换操作;它总是定位的词只是取代。
Printing Documents
QTextEdit是专为大型富文本文档的显示在屏幕上阅读,使他们以同样的方式作为一个web浏览器。因此,它不会自动文档的内容分解成页面大小,适合印刷。    
QTextDocument提供了一个print()函数使用QPrinter类允许打印文档。下面的代码显示了如何准备一个文档在QTextEdit QPrinter印刷:

QTextDocument *document = editor->document();
    QPrinter printer;
    QPrintDialog *dlg = new QPrintDialog(&printer, this); 
    if (dlg->exec() != QDialog::Accepted) 
         return; 
    document->print(&printer);
获得文档的文本编辑器,然后构造QPrinter使用QPrintDialog配置。如果用户接受打印机的配置文档格式化和打印使用print()函数。

四、Rich Text Document Structure
文本文档由QTextDocument类,它包含关于文档的内部表示的信息,其结构,跟踪修改提供撤销/重做设施。
文本文档的结构化表示文本块的层次,呈现内容的框架,表和其他对象。这些提供文档的逻辑结构和描述他们的内容将会显示。一般来说,帧和表用于组其他结构,而文本块包含实际的文本信息。
新元素创建和插入到文档QTextCursor或通过使用一个编辑器部件,如QTextEdit。元素可以给定一个特定格式时创建,否则他们将光标的当前格式的元素。

基本结构
  文档的“顶级”可能是填充的方式显示。每个文档都包含一个根框架,这总是包含至少一个文本块。
一些文本内容的文档,根框架通常包含一个序列块和其他元素。  的帧序列和表总是在文档中由文本块,即使文本块包含的任何信息。这将确保新元素总是可以之间插入现有的结构。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值