目录
[1 -> 概述](#1 -> 概述)
[1.1 -> 核心定位与基础功能](#1.1 -> 核心定位与基础功能)
[1.2 -> 富文本处理:超越纯文本的排版能力](#1.2 -> 富文本处理:超越纯文本的排版能力)
[1.3 -> 高级特性与扩展性](#1.3 -> 高级特性与扩展性)
[1.4 -> 实际应用场景与价值](#1.4 -> 实际应用场景与价值)
[2 -> 核心属性](#2 -> 核心属性)
[3 -> 核心信号](#3 -> 核心信号)
[4 -> 代码示例](#4 -> 代码示例)
[4.1 -> 获取多行输入框的内容](#4.1 -> 获取多行输入框的内容)
[4.2 -> 验证输入框的各种信号](#4.2 -> 验证输入框的各种信号)
[5 -> 总结](#5 -> 总结)

1 -> 概述
在 Qt 框架的众多 UI 控件中,QTextEdit 以其丰富的功能和灵活的扩展性,成为处理文本编辑需求的核心组件之一。无论是简单的文本输入,还是复杂的富文本排版,它都能提供稳定且高效的解决方案,广泛应用于记事本、文档编辑器、聊天软件等各类需要文本交互的应用程序中。
1.1 -> 核心定位与基础功能
QTextEdit 的核心定位是多功能文本编辑容器,它不仅支持基础的纯文本输入与显示,更具备强大的富文本处理能力,是 Qt 中替代基础 QLineEdit 控件、应对复杂文本场景的关键选择。
其基础功能覆盖了日常文本编辑的核心需求:支持光标定位、文本的复制、剪切、粘贴等标准编辑操作,且能自动处理换行与滚动 ------ 当输入内容超出控件可视区域时,会自动生成垂直或水平滚动条,确保编辑体验的流畅性。同时,它允许设置文本的只读模式,在需要展示不可修改的文本内容(如日志查看、文档预览)时尤为实用,只需通过简单的属性配置即可切换编辑与预览状态。
1.2 -> 富文本处理:超越纯文本的排版能力
富文本处理是 QTextEdit 最突出的特性之一,它让文本不再局限于单一的字体与格式,能够实现类似 Word 的基础排版效果,极大提升了文本的表现力。
在格式控制方面,QTextEdit 支持对文本片段或整体进行精细化设置,包括字体类型、大小、粗细、颜色的调整,以及下划线、删除线、斜体等特殊样式的应用。段落级别的排版功能同样丰富,可设置对齐方式(左对齐、居中、右对齐、两端对齐)、行间距、段落间距,还能添加项目符号或编号列表,满足结构化文本的编辑需求。此外,它还支持插入图片、表格等非文本元素,让文本内容的呈现更加多元 ------ 图片可自适应控件大小或保持原始尺寸,表格则能灵活调整行列数与单元格样式,进一步拓展了文本编辑的边界。
1.3 -> 高级特性与扩展性
除了基础的编辑与排版功能,QTextEdit 还内置了多项高级特性,并通过 Qt 的信号与槽机制提供了良好的扩展性,方便开发者根据业务需求进行定制。
在文本处理的深度上,QTextEdit 支持查找与替换功能,开发者可通过 API 实现对特定文本片段的定位、高亮及替换操作,这在文档编辑类应用中不可或缺。其内置的撤销与重做机制,能记录用户的编辑操作历史,提升交互的容错性。对于特殊字符的处理,QTextEdit 也表现出色,支持 Unicode 编码,可兼容多语言文本的输入与显示,满足国际化应用的需求。
在扩展性方面,QTextEdit 提供了丰富的信号(如文本内容变化、光标位置移动、编辑状态改变等),开发者可通过关联相应的槽函数,实现自定义的业务逻辑,例如实时检测文本长度、自动格式化特定内容等。同时,它支持与 Qt 的其他组件联动,如结合 QPrinter 实现文本的打印功能,或与 QTextDocument 配合进行更复杂的文档结构处理,进一步挖掘控件的使用价值。
1.4 -> 实际应用场景与价值
QTextEdit 的功能特性使其在各类 Qt 应用中都能发挥重要作用,成为连接用户与文本内容的关键桥梁。
在轻量级应用中,如简易记事本、便签工具,它可作为核心编辑区域,提供基础的文本输入与保存功能;在专业的文档处理软件中,借助其富文本排版与高级编辑特性,能实现接近专业办公软件的编辑体验;在即时通讯应用里,它可作为消息输入框,支持文字、表情图片的混合输入,提升聊天交互的丰富性;在日志查看或报表展示类工具中,通过只读模式与文本高亮功能,能让关键信息更直观地呈现给用户。
2 -> 核心属性
|-------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------|
| 属性 | 说明 |
| markdown | 输入框内持有的内容。支持 markdown 格式。能够自动的对 markdown 文本进行渲染成 html |
| html | 输入框内持有的内容。可以支持大部分 html 标签,包括 img 和 table 等 |
| placeHolderText | 输入框为空时提示的内容 |
| readOnly | 是否是只读 |
| undoRedoEnable | 是否开启 undo / redo 功能 按下 ctrl + z 触发 undo 按下 ctrl + y 触发 redo |
| autoFormating | 开启自动格式化 |
| tabstopWidth | 按下缩进占多少空间 |
| overwriteMode | 是否开启覆盖写模式 |
| acceptRichText | 是否接收富文本内容 |
| verticalScrollBarPolicy | 垂直方向滚动条的出现策略 * Qt::ScrollBarAsNeeded:根据内容自动决定是否需要滚动条。此为默认值 * Qt::ScrollBarAlwaysOff:总是关闭滚动条 * Qt::ScrollBarAlwaysOn:总是显示滚动条 |
| horizontalScrollBarPolicy | 水平方向滚动条的出现策略 * Qt::ScrollBarAsNeeded:根据内容自动决定是否需要滚动条。此为默认值 * Qt::ScrollBarAlwaysOff:总是关闭滚动条 * Qt::ScrollBarAlwaysOn:总是显示滚动条 |
3 -> 核心信号
|-----------------------------|---------------------|
| 信号 | 说明 |
| textChanged() | 文本内容改变时触发 |
| selectionChanged() | 选中范围改变时触发 |
| cursorPositionChanged() | 光标移动时触发 |
| undoAvailable(bool) | 可以进行 undo 操作时触发 |
| redoAvailable(bool) | 可以进行 redo 操作时触发 |
| copyAvailable(bool) | 文本被选中 / 取消选中时触发 |
4 -> 代码示例
4.1 -> 获取多行输入框的内容
1. 创建一个多行输入框和一个 label

2. 给多行输入框添加 slot 函数。处理 textChanged 信号
- 通过 toPlainText 方法获取到内部的文本
- QTextEdit 还提供了 toMarkdown 和 toHtml。需要根据调整不同的获取方式
cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_textEdit_textChanged()
{
const QString& text = ui->textEdit->toPlainText();
ui->label->setText(text);
}
3. 执行程序,可以看到当输入框中的内容发生变化时,label 中的内容同步发生改变

4.2 -> 验证输入框的各种信号
1. 创建多行输入框

2. 给输入框添加以下几个 slot 函数
- QTextEdit 中包含了一个 QTextCursor 对象,通过这个对象可以获取到当前光标位置和选中的内容
cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_textEdit_textChanged()
{
qDebug() << "textChanged: " << ui->textEdit->toPlainText();
}
void Widget::on_textEdit_selectionChanged()
{
QTextCursor cursor = ui->textEdit->textCursor();
qDebug() << "selectionChanged: " << cursor.selectedText();
}
void Widget::on_textEdit_cursorPositionChanged()
{
QTextCursor cursor = ui->textEdit->textCursor();
qDebug() << "cursorPositionChanged: " << cursor.position();
}
void Widget::on_textEdit_undoAvailable(bool b)
{
qDebug() << "undoAvailable: " << b;
}
void Widget::on_textEdit_redoAvailable(bool b)
{
qDebug() << "redoAvailable: " << b;
}
void Widget::on_textEdit_copyAvailable(bool b)
{
qDebug() << "copyAvailable: " << b;
}
3. 执行程序,观察结果
可以看到:
1)编写内容时,textChanged 和 cursorPositionChanged 会触发


2)选中一段文本,会触发 cursorPositionChanged,selectionChanged,copyAvailable


3)按下 ctrl + z 时,会触发 textChanged,undoAvailable,redoAvailable,cursorPositionChanged


4)按下 ctrl + y,会触发 textChanged,undoAvailable,redoAvailable,cursorPositionChanged


5 -> 总结
作为 Qt 框架中文本编辑领域的标杆控件,QTextEdit 以层层递进的功能体系构建了强大的实用价值:从满足基础输入需求的 "文本容器",到支撑多元排版的 "富文本工具",再到可深度定制的 "扩展平台",它完美适配了从简单到复杂的各类文本场景。其兼顾易用性与灵活性的设计,既降低了开发者的入门门槛,又为高级功能开发预留了充足空间,使其在记事本、专业编辑器、通讯工具等诸多应用中成为不可或缺的核心组件。可以说,QTextEdit 不仅是 Qt 对文本编辑需求的精准回应,更彰显了框架在 UI 组件设计上 "按需适配、弹性扩展" 的核心理念。
感谢各位大佬支持!!!
互三啦!!!