QTextEdit理论总结
- 一、概述
- 二、用途一:富文本阅读器
- 1. 用法
- 2. 快捷键绑定
- 三、用途二:编辑器
- 1. 用法
- 2. 拖拽
- 3. 快捷键绑定
- 四、常用功能
- 五、信号
一、概述
QTextEdit是一个先进的所见即所得的 富文本 查看器/编辑器,支持使用 html 风格的标签或 Markdown格式的富文本格式化。它经过优化,可以处理大型文档,并快速响应用户输入。
QTextEdit适用于段落和字符。段落是一个格式化的字符串,它被word包裹以适应widget的宽度。默认情况下,读取纯文本时,一个换行符表示一个段落。一个文档由零个或多个段落组成。段落中的单词按照段落的对齐方式对齐。段落之间用硬线分隔。段落中的每个字符都有自己的属性,例如字体和颜色。
QTextEdit可以显示图像,列表和表格。如果文本太大,无法在文本编辑的视口内查看,滚动条将出现。文本编辑可以加载纯文本和富文本文件。富文本可以使用HTML 4标记的一个子集来描述;有关更多信息,请参阅支持的HTML子集页面。
如果你只需要显示一小段富文本,请使用QLabel。
Qt对富文本的支持旨在为应用程序添加合理的在线帮助功能提供一种快速、可移植、高效的方式,并为富文本编辑器提供基础。如果你发现HTML支持不足以满足你的需求,可以考虑使用Qt WebKit,它提供了一个功能齐全的web浏览器控件。
QTextEdit上鼠标光标的形状默认是Qt::IBeamCursor。可以通过viewport()的cursor属性来改变这个属性。
二、用途一:富文本阅读器
1. 用法
QTextEdit可以显示一个大的HTML子集,包括表格和图像。
可以使用 setHtml() 设置或替换文本,它会删除任何现有的文本,并用调用 setHtml() 时传递的文本替换它。如果用旧HTML调用 setHtml() ,然后调用 toHtml() ,返回的文本可能有不同的标记,但渲染的是相同的。可以使用 clear() 删除整个文本。
文本也可以使用 setMarkdown()来设置或替换,同样的注意事项也适用:如果你调用了 tommarkdown(),返回的文本可能不同,但尽可能地保留了文本的含义。嵌入了HTML的Markdown可以被解析,但setHtml()有相同的限制;但是,toMarkdown()只编写“纯”Markdown,没有嵌入任何HTML。
文本本身可以使用QTextCursor类插入,也可以使用便捷的函数 insertHtml()、insertPlainText()、append() 或paste()。QTextCursor还能够向文档中插入复杂的对象,如表或列表,它还可以创建选择并对选择的文本应用更改。
默认情况下,文本编辑会在空白处包装单词,以适应文本编辑控件。setLineWrapMode()函数用于指定需要的换行方式,如果不需要换行,则指定NoWrap。调用setLineWrapMode()来设置固定像素宽度FixedPixelWidth或字符列(例如80列)FixedColumnWidth,使用setlinewrapcolumnwidth()指定的像素或列数。如果将换行设置为窗口组件的宽度WidgetWidth,则可以使用setWordWrapMode()指定是否在空格处换行。
find()函数可用于在文本中查找和选择给定的字符串。
如果你想限制QTextEdit中的总段落数,例如它通常在日志查看器中很有用,那么你可以使用QTextDocument的maximumBlockCount属性。
2. 快捷键绑定
当只读使用QTextEdit时,键绑定仅限于导航,文本只能用鼠标选择:
键名 | 含义 |
---|---|
Up | 向上移动一行. |
Down | 向下移动一行 |
Left | 向左移动一个字符 |
Right | 向右移动一个字符 |
PageUp | 向上移动一页 以 viewport 为准. |
PageDown | 向下移动一页 以 viewport 为准. |
Home | 移动到最开始的位置 |
End | 文档结尾位置 |
Alt+Wheel | 水平滚动文本 |
Ctrl+Wheel | 缩放文本. |
Ctrl+A | 全选文本 |
文本编辑可以提供一些元信息。例如,documentTitle()函数将返回HTML
三、用途二:编辑器
1. 用法
关于使用QTextEdit作为显示部件的所有信息也适用于这里。
当前字符格式的属性是通过setFontItalic()、setFontWeight()、setFontUnderline()、setFontFamily()、setFontPointSize()、setTextColor()和setCurrentFont()来设置的。当前段落的对齐方式使用setAlignment()来设置。
选择文本是由QTextCursor类处理的,它提供了创建选择文本、检索文本内容或删除选择文本的功能。使用textCursor()方法可以取得与用户可见的光标对应的对象。如果我们想在QTextEdit中设置一个选择,只需在QTextCursor对象上创建一个,然后使用setTextCursor()使该光标成为可见的光标。可以使用copy()将选区复制到剪贴板,也可以使用cut()将选区剪切到剪贴板。可以使用selectAll()选择整个文本。
当移动游标并且底层的格式化属性发生变化时,会发出currentCharFormatChanged()信号,在新的游标位置反映新的属性。
每当文本发生变化(由setText()引起或通过编辑器本身)时,就会触发textChanged()信号。
QTextEdit保存了一个QTextDocument对象,可以使用document()方法取得这个对象。也可以使用setDocument()设置自己的document对象。
QTextDocument提供了一个isModified()函数,如果文本自加载以来或自最后一次以false作为参数调用setModified以来被修改,该函数将返回true。此外,它还提供了undo和redo方法。
2. 拖拽
QTextEdit还支持自定义拖放行为。默认情况下,当用户将这些MIME类型的数据放入文档时,QTextEdit将插入纯文本、HTML和富文本。重新实现canInsertFromMimeData()和insertFromMimeData(),添加对其他MIME类型的支持。
例如,要允许用户将图像拖放到QTextEdit上,可以按以下方式实现这些函数:
bool TextEdit::canInsertFromMimeData( const QMimeData *source ) const
{
if (source->hasImage())
return true;
else
return QTextEdit::canInsertFromMimeData(source);
}
通过返回true,我们添加了对图像MIME类型的支持。对于所有其他MIME类型,我们使用默认实现。
void TextEdit::insertFromMimeData( const QMimeData *source )
{
if (source->hasImage())
{
QImage image = qvariant_cast<QImage>(source->imageData());
QTextCursor cursor = this->textCursor();
QTextDocument *document = this->document();
document->addResource(QTextDocument::ImageResource, QUrl("image"), image);
cursor.insertImage("image");
}
}
我们从MIME源持有的QVariant中解包图像,并将其作为资源插入文档中。
3. 快捷键绑定
键 | 含义 |
---|---|
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将选择右边的单词,等等。
四、常用功能
下面是一些常用的功能,也即是文本编辑器的基础功能
- append(const QString &text):就是在编辑器的最后添加 text
- clear():清除编辑器的所有内容
- copy():赋值内容到剪切板
- cut():剪切内容到剪切板
- insertHtml(const QString &text):插入html文档
- insertPlainText(const QString &text):插入普通字符串
- paste():从剪贴板粘贴到编辑器中
- redo():撤销操作
- scrollToAnchor(const QString &name): 把内容滚动到具体位置
- selectAll():全选内容
- setAlignment(Qt::Alignment a):文本对齐方式
- setCurrentFont(const QFont &f):设置当前字体格式,里面有字体名称、字体大小等等。
- setFontFamily(const QString &fontFamily):设置文字字体名称,比如是 微软雅黑,或者是 宋体 之类的
- setFontItalic(bool italic):设置文字倾斜
- setFontPointSize(qreal s):设置文字大小
- setFontUnderline(bool underline):设置下划线
- setFontWeight(int weight):设置文本加粗
- setHtml(const QString &text):设置编辑器的内容为 html 格式
- setMarkdown(const QString &markdown):设置编辑器的内容为 Markdown 格式
- setPlainText(const QString &text):设置编辑器的内容为 纯字符 格式
- setText(const QString &text):设置文本编辑的文本。文本可以是纯文本或HTML和文本编辑会试图猜测正确的格式。
- setTextBackgroundColor(const QColor &c):设置
- setTextColor(const QColor &c):
- undo():撤销上次操作
- zoomIn(int range = 1) :缩放,把文字往小的变
- zoomOut(int range = 1):扩大,把文字往大的变
五、信号
信号名 | 含义 |
---|---|
copyAvailable(bool yes) | 该信号在文本编辑文本被选中或取消选择。 |
currentCharFormatChanged(const QTextCharFormat &f) | 就是字符的格式发生了改变的时候 |
cursorPositionChanged() | 鼠标位置改变 |
redoAvailable(bool available) | 即是 恢复 操作有效的时候 |
selectionChanged() | 选择的内容发生改变的时候 |
textChanged() | 文本内容改变的时候,比如删除修改文本 |
undoAvailable(bool available) | 就是 撤销 操作有效的时候 |