QPlainTextEdit理论总结
- 一、概述
- 二、用途一:纯文本展示
- 1. 用法
- 2. 只读快捷键
- 三、用途二:纯文本编辑器
- 1. 用法
- 2. 快捷键绑定
- 四、与 QTextEdit 的不同
一、概述
QPlainTextEdit是一个只支持纯文本的高级查看器/编辑器。 它经过优化,可以处理大型文档,并快速响应用户输入。
QPlainText使用与QTextEdit 非常相同的技术和概念,很多都一样,但针对纯文本处理进行了优化。更适合纯文本从处理。
可以看看 Qt扫盲-QTextEdit理论总结 这个。
QPlainTextEdit适用于段落和字符。段落是一个格式化的字符串,它被word包裹以适应widget的宽度。默认情况下,读取纯文本时,一个换行符表示一个段落。一个文档由零个或多个段落组成。段落之间用硬线分隔。段落中的每个字符都有自己的属性,例如字体和颜色。
QPlainTextEdit上的鼠标光标的形状默认是Qt::IBeamCursor。可以通过viewport()的cursor属性来改变这个属性。
二、用途一:纯文本展示
1. 用法
使用setPlainText()设置或替换文本,它会删除现有的文本,并将其替换为传递给setPlainText()的文本。
可以使用QTextCursor类插入文本,也可以使用便捷的函数insertPlainText()、appendPlainText()或paste()。
默认情况下,文本编辑会在空白处包装单词,以适应文本编辑小部件。setLineWrapMode()函数用于指定你想要的换行类型,如果你不想要任何换行,可以指定WidgetWidth或NoWrap。如果将换行设置为窗口组件的宽度WidgetWidth,则可以使用setWordWrapMode()指定是否在空格处换行。
find()函数可用于在文本中查找和选择给定的字符串。
如果你想限制QPlainTextEdit中的总段落数,比如它在日志查看器中很有用,那么可以使用maximumBlockCount属性。setMaximumBlockCount()和appendPlainText()的组合使QPlainTextEdit成为一个高效的日志文本查看器。使用centerOnScroll()属性可以减少滚动,让日志查看器更快。可以用一种有限的方式格式化文本,要么使用语法高亮显示(见下文),要么使用appendHtml()追加html格式的文本。虽然QPlainTextEdit不支持复杂的富文本渲染表和浮动,但它支持有限的基于段落的格式,您可能需要在日志查看器。
2. 只读快捷键
键名 | 含义 |
---|---|
Up | 向上移动一行. |
Down | 向下移动一行 |
Left | 向左移动一个字符 |
Right | 向右移动一个字符 |
PageUp | 向上移动一页 以 viewport 为准. |
PageDown | 向下移动一页 以 viewport 为准. |
Home | 移动到最开始的位置 |
End | 文档结尾位置 |
Alt+Wheel | 水平滚动文本 |
Ctrl+Wheel | 缩放文本. |
Ctrl+A | 全选文本 |
三、用途二:纯文本编辑器
1. 用法
选择文本是由 QTextCursor 类处理的,它提供了创建选择文本、检索文本内容或删除选择文本的功能。使用 textCursor() 方法可以取得与用户可见的光标对应的对象。如果你想在QPlainTextEdit中设置一个选择,只需在QTextCursor对象上创建一个,然后使用 setCursor() 使该光标成为可见的光标。可以使用copy()将选区复制到剪贴板,也可以使用cut()将选区剪切到剪贴板。可以使用selectAll()选择整个文本。
QPlainTextEdit保存了一个 QTextDocument 对象,可以使用 document() 方法取得它。也可以使用 setDocument() 设置自己的document对象。如果文本发生变化,QTextDocument 会发出一个 textChanged() 信号,它还提供了一个 isModified() 函数,如果文本自加载以来或自最后一次调用 setModified 以 false 作为参数以来被修改,则返回true。此外,它还提供了undo和redo方法。
2. 快捷键绑定
键 | 含义 |
---|---|
Backspace | 删除光标左边的字符. |
Delete | 删除的字符向右光标。 |
Ctrl+C | 将选中的文本复制到剪贴板. |
Ctrl+Insert | Copy the selected text to the clipboard. |
Ctrl+K | 删除的最后一行 |
Ctrl+V | 粘贴剪贴板的文本到文本编辑。 |
Shift+Insert | 粘贴剪贴板的文本到文本编辑。 |
Ctrl+X | 删除选中的文本,并将它复制到剪贴板. |
Shift+Delete | 删除选中的文本,并将它复制到剪贴板. |
Ctrl+Z | 撤销了最后一个操作. |
Ctrl+Y | 恢复了最后一个操作. |
Left | 移动光标向左一个字符。 |
Ctrl+Left | 向左移动光标一个词。 |
Right | 向右移动光标一个字符. |
Ctrl+Right | 向右移动光标一个词. |
Up | 移动光标一行。 |
Down | 移动光标一行。 |
PageUp | 移动光标向上一页。 |
PageDown | 移动光标一页向下一页 |
Home | 移动光标到一行的开始处。 |
Ctrl+Home | 移动光标到文本的开始。 |
End | 移动光标到行结束。 |
Ctrl+End | 移动光标到最后的文本. |
Alt+Wheel | 水平滚动页面(wheel是鼠标滚轮). |
要选择(标记)文本,请按住Shift键,同时按下一个移动键,例如,Shift+Right将选择右边的字符,Shift+Ctrl+Right将选择右边的单词,等等。
四、与 QTextEdit 的不同
QPlainTextEdit是一个很精简的类,通过使用QTextEdit和QTextDocument背后的大部分技术来实现。它比QTextEdit的性能优势主要来自于在文本文档上使用不同的和简化的文本布局QPlainTextDocumentLayout(参见QTextDocument::setDocumentLayout())。
纯文本文档布局不支持表格或嵌入的框架,用逐行逐段滚动的方法取代了精确到像素的高度计算。这使得处理明显更大的文档成为可能,并且仍然可以实时调整编辑器的大小并启用换行功能。它还提供了一个快速的日志查看器(参见setMaximumBlockCount())。