警告
本节包含从 C++ 自动翻译到 Python 的代码片段,可能包含错误。
常见富文本编辑任务#
在编辑和处理使用 Qt 的文本文档时,开发人员通常会执行多项任务。这包括使用显示小部件(如 QTextBrowser 和 QTextEdit)、利用 QTextDocument
创建文档、使用 QTextCursor
进行编辑以及导出文档结构。本文档概述了一些常见方式使用丰富文本类来完成这些任务,展示了一些可在您自己的应用程序中重用的便利模式。
使用 QTextEdit#
可以用以下方式构建和用于显示 HTML 的文本编辑小部件
editor = QTextEdit(parent) editor.setHtml(aStringContainingHTMLtext) editor.show()
默认情况下,文本编辑器包含一个具有根框架的文档,其中包含一个空白的文本块。此文档可以由应用程序直接修改以获得
document = editor.document()
文本编辑器的光标也可用于编辑文档
cursor = editor.textCursor()
尽管可以使用许多光标同时编辑文档,但 QTextEdit 一次只能显示一个光标。因此,如果我们想要更新编辑器以显示特定的光标或其选定内容,我们需要在修改文档后在编辑器中设置光标
editor.setTextCursor(cursor)
选择文本#
通过使用类似于用户在文本编辑器中执行的操作移动光标来选择文本。为了在文档中的两个点之间选择文本,我们需要将光标定位在第一个点,然后使用特殊模式(MoveMode
)使用移动操作(MoveOperation
)移动光标。在选择文本时,我们像用户在选中文本时按住 Shift 键一样,将选择锚点留在了原来的光标位置
cursor.movePosition(QTextCursor.StartOfWord) cursor.movePosition(QTextCursor.EndOfWord, QTextCursor.KeepAnchor)
在上面的代码中,使用该方法选择了一个单词。 QTextCursor
提供了用于选择单个字符、单词、行和整个块等许多常见移动操作。
查找文本#
QTextDocument
为搜索提供了一个基于光标的接口,这使得它很容易以文本编辑器的风格查找和修改文本。以下代码找到了文档中某个特定单词的所有实例,并改变了每个单词的颜色
newCursor = QTextCursor(document) while not newCursor.isNull() and not newCursor.atEnd(): newCursor = document.find(searchString, newCursor) if not newCursor.isNull(): newCursor.movePosition(QTextCursor.WordRight, QTextCursor.KeepAnchor) newCursor.mergeCharFormat(colorFormat)
请注意,在每次搜索和替换操作后,不需要移动光标;它始终位于刚刚替换的单词的末尾。
打印文档#
QTextEdit是为在屏幕上阅读的富文本大文档而设计的,它以与网页浏览器相同的方式渲染它们。因此,它不会自动将文档内容分成适合打印的页面大小的片段。
QTextDocument
提供了一个print()
函数,允许使用QPrinter类打印文档。以下代码演示了如何使用QPrinter类准备QTextEdit中的文档进行打印:
document = editor.document() printer = QPrinter() dlg = QPrintDialog(printer, self) if dlg.exec() != QDialog.Accepted: return document.print(printer)
首先从文本编辑器获取文档,然后使用QPrintDialog配置创建一个QPrinter。如果用户接受打印机的配置,则使用print()
函数对文档进行格式化和打印。