QPlainTextEdit 概述
-
用途:专为处理纯文本设计,适合大文本编辑和简单文本显示(如日志、代码编辑器)。
-
特点:相比QTextEdit,轻量高效,支持快速加载和滚动大文件,默认不支持富文本。
核心功能
文本操作
-
setPlainText(const QString &text):设置控件内容。
-
toPlainText():获取全部文本。
-
appendPlainText(const QString &text):追加文本并自动换行。
-
insertPlainText(const QString &text):在光标处插入文本。
-
clear():清空内容。
撤销与重做
- undo() / redo():支持撤销栈操作。
- setUndoRedoEnabled(bool enable):启用或禁用撤销历史。
查找与替换
- find(const QString &exp, QTextDocument::FindFlags flags):查找文本,返回是否成功。
- 示例:查找区分大小写的文本:
bool found = textEdit->find("searchText", QTextDocument::FindCaseSensitively);
光标与滚动
- textCursor():获取QTextCursor对象,控制光标位置和选择。
- ensureCursorVisible():滚动确保光标可见。
- centerCursor():垂直居中光标所在行。
性能优化
- 基于块(Block)的渲染:每个段落作为独立块处理,提升大文本性能。
- 限制行数:避免内存溢出:
textEdit->setMaximumBlockCount(1000); // 仅保留最近1000行
样式与外观
- 字体与颜色
QFont font("Monospace", 10);
textEdit->setFont(font);
textEdit->setStyleSheet("color: blue; background-color: #f0f0f0;");
- 只读模式
QtextEdit->setReadOnly(true);
信号与事件
- 常用信号:
textChanged():文本内容变化时触发。modificationChanged(bool changed):修改状态变化时触发。
- 事件处理:重写keyPressEvent()实现自定义键盘逻辑。
高级功能
- 语法高亮:需结合QSyntaxHighlighter类实现。
- 行号显示:通过继承QWidget并重绘实现,监听blockCountChanged信号更新行号区域。
- 自定义上下文菜单:重写contextMenuEvent()添加自定义菜单项。
使用场景
- 日志显示:实时追加日志信息:
textEdit->appendPlainText("[INFO] Application started.");
-
代码编辑器:结合语法高亮和行号。
-
大文本处理:如加载日志文件时逐块读取:
QFile file("large_log.txt");
if (file.open(QIODevice::ReadOnly)) {while (!file.atEnd()) {textEdit->appendPlainText(file.readLine());}
}
注意事项
- 线程安全:避免在非GUI线程直接操作控件,使用信号槽更新UI。
- 性能调优:加载超大文件时,分块处理或限制历史行数。
- 富文本限制:不支持HTML/富文本,需用QTextEdit替代。