当前位置: 首页 > backend >正文

QT控件QPlainTextEdit、QTextEdit与QTextBrowser的区别

一.主要功能对比

二.关键功能差异

1.文本类型支持

QPlainTextEdit:

仅支持纯文本(Plain Text),不处理任何格式(如字体、颜色、链接、图片等)。文本以原始字符形式存储,适合处理日志、代码、配置文件等无需格式的内容。

例:输入 <font color="red">文本</font> 会被当作普通字符串显示,不会渲染为红色文本。

QTextEdit 与 QTextBrowser:

均支持富文本(Rich Text),可解析和渲染 HTML 格式的文本(如 <b>加粗</b>、<img src="icon.png">),支持字体样式、颜色、段落对齐、表格、图片嵌入等格式。

例:输入 <font color="red">文本</font> 会直接显示为红色文本。

2.编辑能力

QPlainTextEdit 与 QTextEdit:

默认可编辑(用户可输入、删除、修改文本),可通过 setReadOnly(true) 设置为只读模式。

QPlainTextEdit 提供基础编辑功能(换行、撤销 / 重做、选中复制等)。

QTextEdit 额外支持富文本编辑(如设置字体颜色、插入图片等)。

QTextBrowser:

默认只读(readOnly 属性默认 true),虽然可通过 setReadOnly(false) 强制开启编辑,但设计初衷是 “浏览” 而非 “编辑”,编辑体验较差(如富文本编辑功能被弱化)。

注意:ui->textBrowser->setReadOnly(false); 设置为false也是可以编辑的

3.附加功能

QPlainTextEdit:

专注纯文本效率,提供代码编辑优化:

支持行号显示(需配合 QTextEdit 或自定义实现)。

低延迟滚动(处理 10 万行以上文本时,性能优于 QTextEdit)。

支持 “按列选择”(按住 Alt 键拖动鼠标)。

QTextEdit:

专注富文本处理,提供格式控制接口:

通过 setFont()、setTextColor() 等方法设置文本样式。

通过 insertHtml()、insertImage() 插入富文本内容。

支持段落对齐(左对齐、居中、右对齐)。

QTextBrowser:

专注文本浏览与交互,扩展导航功能:

支持超链接(<a href="xxx">链接</a>),点击链接可触发 anchorClicked 信号(如跳转到其他页面)。

内置 “前进 / 后退” 导航(forward()、backward() 方法),类似浏览器历史记录。

可加载本地 HTML 文件(setSource(QUrl) 方法),适合展示帮助文档。

三.选择指南

只需要显示纯文本或日志 → 选择 QPlainTextEdit

需要富文本编辑功能 → 选择 QTextEdit

需要显示富文本内容但不需编辑 → 选择 QTextBrowser

处理大量文本(>10,000行) → 优先选择 QPlainTextEdit

需要超链接功能 → 选择 QTextEdit 或 QTextBrowser

需要文本浏览历史 → 选择 QTextBrowser

  • 测试代码示例

1.代码

#include "mainwindow.h"

#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)

    : QMainWindow(parent)

    , ui(new Ui::MainWindow)

{

    ui->setupUi(this);

    //可读、可写设置

    //ui->textEdit->setReadOnly(true);

    //ui->plainTextEdit->setReadOnly(true);

    ui->textBrowser->setReadOnly(false);   //默认就是只读的,false就是可写的

//设置等宽字体,便于对齐

    QFont font("Lucida Console", 10);  //等宽字体  //粗一点

    //QFont font("Courier New", 10);   // 等宽字体   //字体很细

    ui->textBrowser->setFont(font);

    ui->textEdit->setFont(font);

    ui->plainTextEdit->setFont(font);

//显示数据

    QString tem = QString::number(1236).rightJustified(10, ' ');

    ui->textBrowser->append(tem);

    ui->textEdit->append(tem);

    ui->plainTextEdit->appendPlainText(tem);

    tem = QString::number(123567).rightJustified(10, ' ');

    ui->textBrowser->append(tem);

    ui->textEdit->append(tem);

    ui->plainTextEdit->appendPlainText(tem);

    tem = QString::number(12).rightJustified(10, ' ');

    ui->textBrowser->append(tem);

    ui->textEdit->append(tem);

    ui->plainTextEdit->appendPlainText(tem);

//网页格式方式,plainTextEdit不支持;语句自动换行

    tem = "<font color=\"red\">QT软件</font> <b>QT测试</b>";

    ui->textBrowser->append(tem);

    ui->textEdit->append(tem);

    ui->plainTextEdit->appendPlainText(tem);

    tem = "<font color=\"red\">QT软件</font> <b>QT测试</b>";

    ui->textBrowser->append(tem);

    ui->textEdit->append(tem);

    ui->plainTextEdit->appendPlainText(tem);

    tem = "<span style=\"color: red; font-weight: bold;\">QT软件</span> "

                       "<span style=\"color: red; font-weight: bold;\">QT测试</span>";

    ui->textBrowser->append(tem);

    ui->textEdit->append(tem);

    ui->plainTextEdit->appendPlainText(tem);

//三个控件都可以用的写入格式字符串的通用方法

    insertFormattedText(ui->textBrowser, "\r\nTest Result:", Qt::black, true, false); //需要前面加入\r\n 手动换行

    insertFormattedText(ui->textEdit, "\r\nTest Result:", Qt::black, true, false);

    insertFormattedText(ui->plainTextEdit, "\r\nTest Result:", Qt::black, true, false);

}

void MainWindow::insertFormattedText(QTextEdit *editor, const QString &text,

                                 const QColor &color,

                                 bool bold,

                                 bool italic)

{

    QTextCursor cursor = editor->textCursor();

    QTextCharFormat format;

    QTextCharFormat originalFormat = cursor.charFormat();

    // 移动到文档末尾

    cursor.movePosition(QTextCursor::End);

    // 设置文本颜色

    format.setForeground(color);

    // 设置加粗

    format.setFontWeight(bold ? QFont::Bold : QFont::Normal);

    // 设置斜体

    format.setFontItalic(italic);

    // 应用格式

    cursor.mergeCharFormat(format);

    // 插入文本

    cursor.insertText(text);

    // 恢复默认格式(可选)

    cursor.setCharFormat(originalFormat);

    // 将修改后的光标设置回编辑器

    editor->setTextCursor(cursor);

}

void MainWindow::insertFormattedText(QPlainTextEdit *editor, const QString &text,

                                     const QColor &color,

                                     bool bold,

                                     bool italic)

{

    QTextCursor cursor = editor->textCursor();

    QTextCharFormat format;

    QTextCharFormat originalFormat = cursor.charFormat();

    // 移动到文档末尾

    cursor.movePosition(QTextCursor::End);

    // 设置文本颜色

    format.setForeground(color);

    // 设置加粗

    format.setFontWeight(bold ? QFont::Bold : QFont::Normal);

    // 设置斜体

    format.setFontItalic(italic);

    // 应用格式

    cursor.mergeCharFormat(format);

    // 插入文本

    cursor.insertText(text);

    // 恢复默认格式(可选)

    cursor.setCharFormat(originalFormat);

    // 将修改后的光标设置回编辑器

    editor->setTextCursor(cursor);

}

2.运行效果

http://www.xdnf.cn/news/19447.html

相关文章:

  • 【秋招笔试】2025.08.31小红书秋招笔试真题
  • 解读数据中台建设汇报方案【附全文阅读】
  • 淘天二面总结
  • 链表算法知识汇总
  • lesson51:CSS全攻略:从基础样式到前沿特性的实战指南
  • 【读论文】量子关联增强双梳光谱技术
  • RabbitMinQ(模拟实现消息队列项目)02
  • 【零碎小知识点 】(四) Java多线程编程深入与实践
  • Spring Cloud ------ Gateway
  • 阿里Qoder怎么样?实测对比TRAE SOLO 和 CodeBuddy IDE
  • 【甲烷数据集】全球逐日无缝隙柱平均干空气甲烷浓度(XCH₄)
  • Solid Explorer文件管理器:功能强大的安卓文件管理器及网盘文件管理器
  • FFMPEG AAC
  • 【MySQL详解】索引、事务、锁、日志
  • 【MySQL基础】MySQL核心操作全解析
  • GPT - 5 技术前瞻与开发者高效接入路径探索​
  • Java-113 深入浅出 MySQL 扩容全攻略:触发条件、迁移方案与性能优化
  • Java实现图像像素化
  • VirtualBox7.2安装步骤
  • RT-DETR网络结构
  • 开源 C# .net mvc 开发(九)websocket--服务器与客户端的实时通信
  • LangChain VectorStores核心:多向量数据库统一交互层与RAG存储中枢
  • 云原生新手入门完整学习指南
  • 14:00面试,15:00就出来了,问的问题过于变态了。。。
  • 【面试场景题】100M网络带宽能不能支撑QPS3000
  • UnderPressure 论文简单解读
  • 【Linux篇章】再续传输层协议UDP :从低可靠到极速传输的协议重生之路,揭秘无连接通信的二次进化密码!
  • 基于STM32的ESP8266连接华为云(MQTT协议)
  • 基于Flask的企业级产品信息管理系统技术实现笔记
  • 从 “能用” 到 “好用”:生成式 AI 落地三大核心痛点与破局路径