此类继承自 QAbstractScrollArea,提供了一个用于编辑和显示纯文本的小部件。它经过优化,可以处理大型文档并对用户输入做出快速响应。
QPlainTextEdit 适用于段落和字符。段落是一个格式化的字符串,它会自动换行以适应小部件的宽度。默认情况下,当阅读纯文本时,一个段落后有一个换行符。文档多个段落组成。段落中的每个字符都有自己的属性,例如字体和颜色。
1、enum QPlainTextEdit::LineWrapMode:换行模式。
1、backgroundVisible : bool
此属性确定调色板背景在文档区域外是否可见。默认为 false。
2、[read-only] blockCount : const int
文档中的文本块数。默认在空文档中,此属性值为1。
3、centerOnScroll : bool
光标是否应在屏幕上居中。默认值为false。
设置为true,则将垂直滚动文档,使光标在视口中心可见。这也允许文本编辑滚动到文档末尾下方。设置为false,则将滚动尽可能小的量,以确保光标可见。
设置为true:
设置为false:
3、cursorWidth : int
以像素为单位指定光标的宽度。默认值为1。
设置为60:
4、documentTitle : QString
从文本解析的文档的标题。
5、lineWrapMode : LineWrapMode
换行模式。
6、maximumBlockCount : int
指定文档可具有的最大块数。超出此值会从文档的开头删除块。
负值或零值指定文档可能包含无限量的块。默认值为0。
设置此属性将立即对文档内容应用限制。设置此属性还将禁用撤消回撤历史记录。
7、overwriteMode : bool
当鼠标光标不在文本块末尾时,用户输入的文本是否覆盖现有文本。默认为false。
如果为 true ,则现有文本将被新文本逐个字符覆盖。
8、placeholderText : QString
编辑器内容为空时显示的描述文本。如“请输入内容...”此类文本。
9、plainText : QString
内容文本。
10、readOnly : bool
是否为只读,默认值为 false。
11、tabChangesFocus : bool
设置为 true 则按下 Tab 键不是输入一个制表符而是更改输入焦点为其他控件。默认值为false。
12、tabStopDistance : qreal
制表符的长度。默认为80像素。
设置为180:
13、textInteractionFlags : Qt::TextInteractionFlags
在显示文本时应如何与用户输入交互。默认值取决于此小部件是只读的还是可编辑的。
Qt::TextInteractionFlag:
14、undoRedoEnabled : bool
是否启用撤消和回撤。默认为 true。
15、wordWrapMode : QTextOption::WrapMode
在按单词换行文本时使用的模式。默认为 WrapAtWordBoundaryOrAnywhere。
enum QTextOption::WrapMode:
1、void appendHtml(const QString &html)
在末尾添加一个带有html的新段落。
2、 void appendPlainText(const QString &text)
在文本编辑的末尾添加一个新段落和文本。
3、【信号】void blockCountChanged(int newBlockCount)
每当文本块数目改变时,就会发出该信号。
4、void centerCursor()
滚动文档以使光标垂直居中。
5、void clear()
删除文本编辑中的所有文本。撤消/回撤历史记录也被清除。
6、void copy()
将选定文本复制到剪贴板。
7、【信号】void copyAvailable(bool yes)
当选择或取消选择文本时,会发出此信号。参数为是否选择了文本
如果 yes 为 true,则可以使用 copy() 将所选内容复制到剪贴板。
8、【信号】void cursorPositionChanged()
光标的位置发生变化时发出该信号。
9、void cut()
将所选文本复制到剪贴板并从文本编辑中删除。
10、void insertPlainText(const QString &text)
在当前光标位置插入文本。
等同于:
edit->textCursor().insertText(text);
11、【信号】void modificationChanged(bool changed)
每当文档内容以影响修改状态的方式改变时,就会发出此信号。
12、void paste()
将剪贴板中的文本粘贴到当前光标位置。
要更改此函数的行为,即修改 QPlainTextEdit 可以粘贴的内容及其粘贴方式,可重新实现虚函数canInsertFromMimeData() 和 insertFromMimeData()。
示例:实现复制一个文件路径到编辑框,编辑框自动读取文件内容并展示。
- #ifndef MYPLAINTEXTEDIT_H
- #define MYPLAINTEXTEDIT_H
-
- #include
-
- class MyPlainTextEdit : public QPlainTextEdit
- {
- Q_OBJECT
- public:
- MyPlainTextEdit(QWidget *parent = nullptr);
-
- protected:
- bool canInsertFromMimeData(const QMimeData *source) const override;
- void insertFromMimeData(const QMimeData *source) override;
- };
-
- #endif // MYPLAINTEXTEDIT_H
- #include "myplaintextedit.h"
- #include
- #include
-
- MyPlainTextEdit::MyPlainTextEdit(QWidget *parent):
- QPlainTextEdit(parent)
- {
- }
-
- bool MyPlainTextEdit::canInsertFromMimeData(const QMimeData *source) const
- {
- return source->hasText();
- }
-
- void MyPlainTextEdit::insertFromMimeData(const QMimeData *source)
- {
- QFile file(source->text());
- if(file.exists())
- {
- if(file.open(QFile::ReadOnly))
- {
- auto data = file.readAll();
- this->setPlainText(data);
- file.close();
- }
- }
- }
13、void undo() / void redo()
撤销/回撤上次操作。
14、【信号】void undoAvailable(bool available) / 【信号】void redoAvailable(bool available)
每当 撤销/回撤 操作变化时,可用(available为 true)或不可用(available是 false)时,就会发出此信号。
15、void selectAll()
选中所有文本。
16、void selectionChanged()
只要选择内容发生变化,就会发出此信号。
17、【信号】void updateRequest(const QRect &rect, int dy)
内容发生变化(包括光标在编辑器内闪烁时)时会发送此信号。
rect 是重绘的区域,dy就是滚动的垂直方向的像素值。
18、void zoomIn(int range = 1) / void zoomOut(int range = 1)
通过增大减小字体的大小来缩放文本。
19、QString anchorAt(const QPoint &pos)
返回位置 pos 处锚点的引用的文本。
20、QRectF blockBoundingGeometry(const QTextBlock &block)
以文本内容坐标返回文本块的边框。
21、QRectF blockBoundingRect(const QTextBlock &block)
返回文本块在其自身坐标中的边界矩形。
22、bool canInsertFromMimeData(const QMimeData *source)
source 指定的MIME数据对象的内容是否可以解码并插入到文档中。
例如,当在拖动操作过程中,鼠标进入该小部件,并且需要确定是否可以接受拖动时,就会调用此函数。
23、bool canPaste()
返回文本是否可以从剪贴板粘贴到文本编辑中。
24、QPointF contentOffset()
以视口坐标返回内容的原点。内容的原点始终位于第一个可见文本块的左上角。
25、void contextMenuEvent(QContextMenuEvent *event)
显示使用 createStandardContextMenu() 创建的标准上下文菜单。
如果要自定义上下文菜单,可重新实现此功能。
如果要扩展标准上下文菜单,可重新实现此函数,并调用 createStandardContextMenu() 并扩展返回的菜单。
扩展标准上下文菜单:
26、QMimeData * createMimeDataFromSelection()
此函数返回一个新的MIME数据对象,以表示文本编辑当前选择的内容。当选择需要封装到新的 QMimeData 对象中时将调用该函数。例如,当开始拖放操作或将数据复制到剪贴板时。
如果重新实现此函数,注意将返回的 QMimeData 对象的所有权将传递给调用者。可以使用textCursor() 函数检索所选内容。
27、QMenu * createStandardContextMenu()
QMenu * createStandardContextMenu(const QPoint &position)
此函数用于创建标准上下文菜单,当用户用鼠标右键单击文本编辑时显示该菜单。
此函数在默认的 contextMenuEvent() 处理程序中调用。弹出菜单的所有权转移给调用者。
28、QTextCharFormat currentCharFormat()
当前字符格式,即插入新文本时使用的字符格式。
29、QTextCursor cursorForPosition(const QPoint &pos)
返回视口坐标 pos 的 QTextCursor。
30、QRect cursorRect()
返回包含文本编辑光标的矩形(在视口坐标中)。
31、void ensureCursorVisible()
如有必要,通过滚动滚动条来确保光标可见。
32、bool find(const QString &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags())
bool find(const QRegularExpression &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags())
使用给定的选项查找字符串 exp 的下一个匹配项。如果找到则返回 true,并更改光标以选择匹配项;找不到则返回 false。
33、QTextBlock firstVisibleBlock()
返回第一个可见块。
34、void insertFromMimeData(const QMimeData *source)
此函数用于将 source 指定的MIME数据对象的内容插入到当前光标位置。每当由于剪贴板粘贴操作而插入文本时,或者当文本编辑接受拖放操作的数据时,都会调用该函数。
35、QVariant loadResource(int type, const QUrl &name)
加载指定的资源。此函数是 QTextDocument::loadResource() 的扩展。
36、void mergeCurrentCharFormat(const QTextCharFormat &modifier)
通过在编辑器光标上调用 QTextCursor::mergeCharFormat(),将 modifier 中指定的属性合并为当前字符格式。如果当前有选择内容,则 modifier 的属性将直接应用于该内容。
37、void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor)
通过执行给定操作移动光标。
enum QTextCursor::MoveOperation:
enum QTextCursor::MoveMode:
38、void print(QPagedPaintDevice *printer)
将文本编辑的文档打印到给定打印机的便捷功能。这相当于直接调用文档上的打印方法,只是此函数还支持将 QPrinter::Selection 作为打印范围。
39、void setCurrentCharFormat(const QTextCharFormat &format)
在编辑器光标上调用 QTextCursor::setCharFormat(),设置插入的新文本时使用的字符格式。如果编辑器此时选择了内容,那么字符格式将直接应用于该内容。
40、void setExtraSelections(const QList
使用指定格式临时标记文档中的某些区域。
- QList
selections; -
- QTextEdit::ExtraSelection extra1;
- extra1.format.setBackground(Qt::red);
- extra1.cursor = ui->plainTextEdit->textCursor();
-
- selections << extra1;
-
- QTextEdit::ExtraSelection extra2;
- extra2.format.setBackground(Qt::green);
- QTextCursor currentCursor(ui->plainTextEdit->textCursor());//光标副本
- currentCursor.movePosition(QTextCursor::Down,QTextCursor::KeepAnchor);//向下一行移动
- currentCursor.select(QTextCursor::LineUnderCursor);//选中这行
- ui->plainTextEdit->setTextCursor(currentCursor);
- extra2.cursor = ui->plainTextEdit->textCursor();
-
- selections << extra2;
-
- ui->plainTextEdit->setExtraSelections(selections);
41、void setTextCursor(const QTextCursor &cursor) / QTextCursor textCursor()
返回表示当前可见光标的QTextCursor的副本。对返回光标的更改不会影响 QPlainTextEdit 的光标。