一.主要功能对比

二.关键功能差异

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.pswp.cn/bicheng/95319.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95319.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/95319.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【思考】WSL是什么

WSL WSL是什么呢&#xff1f; WSL 是 windows subsystem for linux 的简写&#xff0c;指的是 windows10 的一个子系统&#xff0c;这个子系统的作用是在 windows 下运行 linux 操作系统。 有了WSL&#xff0c;就可以在 windows10 中运行linux操作系统了。许多在 linux 种运行的…

基于单片机智能饮水机/智能热水壶

传送门 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目速选一览表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目功能速览 概述 基于单片机的智能饮水机系统通过嵌入式技术实现水温控制、水量监测及用户交互功能。系统采用STM3…

Unity游戏打包——iOS打包基础、传包

本文由 NRatel 历史笔记整理而来&#xff0c;如有错误欢迎指正。 相关参考文档 Unity文档 -> 平台开发 -> IOS https://docs.unity3d.com/cn/2021.3/Manual/iphone.html Unity导出的Xcode 项目的结构 Modifying an Xcode project use Xcode.PBXProject. https://doc…

pyside6小项目:进制转换器

from PySide6.QtUiTools import QUiLoader from PySide6.QtWidgets import QApplication,QWidgetclass MyWindow(QWidget):def __init__(self):super().__init__()self.ui QUiLoader().load(trans.ui)self.ui.show()#stor data type dictionaryself.lengthVar {米:100, 千米:…

再见 K8s!3款开源的云原生部署工具

前文&#xff0c;和大家分享了云原生中的核心工具 K8s&#xff1a; 关于 K8s&#xff1a;入门&#xff0c;这篇就够了 K8s是个好东西&#xff0c;就是上手门槛有点高。这不&#xff0c;需求就来了&#xff1f; 有需求&#xff0c;就有工具。 为了解决K8s的配置难题&#xf…

C++ 快速复习指南(上半部分)

1.基础语法基本结构#include <iostream> 头名 using namesapce std ; 统一使用命名空间 int main () { 程序执行门户 主题内容}基本输出 cout << "string " << endl; // 输出 string 变量和数据类型 格式int intger 10 ;常量的引入 需要在变量…

ArcGIS Pro 地图打包与解包

如果需要在ArcGIS Pro 打包某一个地图文档&#xff0c;在 菜单栏中 点击 共享&#xff0c;点击地图。弹出 打包地图 面板&#xff0c;可以打包到Online、打包到地图包&#xff0c;选择将包保存到文件&#xff0c;修改项目详细信息&#xff0c;点击 包&#xff0c;即可实现打包。…

sunset: twilight靶场

sunset: twilight 来自 <sunset: twilight ~ VulnHub> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.128&#xff0c;靶场IP192.168.23.145 3&#xff0c;对靶机…

【机器学习基础】无监督学习算法的现代演进:从数据探索到智能系统的自主发现能力

1. 引言:无监督学习在人工智能革命中的核心价值 在人工智能技术飞速发展的今天,无监督学习正在成为推动AI系统实现真正智能的关键技术。与需要大量标注数据的监督学习不同,无监督学习能够从原始数据中自主发现隐藏的模式和结构,这种能力使其在现代AI应用中具有不可替代的价…

PetaLinux的JTAG启动

csdn–PetaLinux 使用技巧与缓存配置 xilinx官网–PetaLinux 工具文档参考指南 (ug1144) xilinx官网–设备树配置文档 内核官网–设备树文档 软硬件准备 分类项目说明/用途验证方法示例硬件JTAG 线JTAG 下载、调试—UART 串口线查看 zynq 启动日志—网口线用于 TFTP 下载—…

单片机中的按键防抖

按钮&#xff08;按键&#xff09;抖动是单片机开发中常见的硬件问题&#xff0c;本质是机械触点接触瞬间的物理弹跳导致的电信号不稳定。消除抖动&#xff08;防抖&#xff09;是确保按键状态检测准确的关键&#xff0c;下面从原理到实现详细讲解。 一、按钮抖动的原理&#x…

面经分享--小米Java一面

目录 1.Kafka和RocketMQ的区别 2.反射的作用 3.类加载的具体过程&#xff0c;双亲委派模型的机制 4.TCP的四次挥手 5.多线程的优势 6.死锁产生的原因&#xff0c;怎么解决 7.Java并发的工作原理 8.常用的git命令 9.算法题 1.leetcode 3.无重复字符的最长子串&#xff…

Python在边缘计算与物联网中的创新实践:实时数据处理与设备控制

近年来&#xff0c;Python语言的普及度持续攀升&#xff0c;尤其在人工智能、数据科学等热门领域备受青睐。然而&#xff0c;一个新兴趋势——边缘计算与物联网&#xff08;IoT&#xff09;的结合——正悄然改变技术格局。边缘计算强调在数据源头进行实时处理&#xff0c;减少云…

Spring Cloud Gateway 网关(五)

目录 一 概念引入 二 具体使用 1 首先创建一个网关模块 2 启动类 3 配置类 4 对应方法的修改 5 展示借助81端口进行转发控制 6 断言规则​编辑 三 过滤器 1 将前置的请求参数给过滤掉&#xff0c;降低繁琐程度。 2 默认过滤器 3 全局过滤器 4 自定义过滤器工厂 5…

产品经理操作手册(8)——业务需求文档(BRD)

一、BRD的定义与价值 **业务需求文档(BRD)**是产品开发前期的基础性文档&#xff0c;它将业务诉求转化为结构化的产品需求&#xff0c;是连接业务方与交付团队的桥梁。“BRD不仅是一份文档&#xff0c;而是一个对齐的过程。”BRD核心价值 统一认知&#xff1a;确保各方对业务目…

Excel表格多级下拉选项,如何制作?

之前分享过如何设置下拉选项&#xff0c;但那只是简单的一级下拉菜单&#xff0c;今天再给大家分享多级下拉菜单如何制作。也就是根据前面的下拉选项改变后面的选项。 我们现来复习一级下拉菜单&#xff0c;再接着讲多级下拉菜单 一级下拉选项 首先我们先将表格内容凑填写好…

[Sync_ai_vid] 唇形同步评判器 | 图像与视频处理器 | GPU测试

第4章&#xff1a;SyncNet唇形同步评判器 在前几章中&#xff0c;我们了解了唇形同步推理流程如何协调生成唇形同步视频&#xff0c;以及音频特征提取器(Whisper)如何为LatentSync UNet提供关键音频线索。 UNet利用这些线索巧妙调整唇部动作。但我们如何判断UNet的生成效果&a…

算法:插入排序

插入排序&#xff08;直接插入排序&#xff09; 是一种基于“插入”的排序 思路 它的核心思想是把数组分成两部分&#xff1a;一部分是有序区&#xff0c;另一部分是乱序区也就是待排序区。 每次从未排序部分“取出”一个元素&#xff0c;插入到前半部分合适的位置&#xff0c;…

MCP Go SDK

MCP Go SDK v0.3.0 Open in GitHub Codespaces &#xff08;在 GitHub Codespaces 中打开&#xff09; BREAKING CHANGES &#xff08;重大变更&#xff09; This version contains breaking changes. See the release notes for details PkgGoDev &#xff08;Go 官方包文档入…

面试问题详解十一:Qt中的线程池与 QRunnable

在 Qt 中&#xff0c;多线程的使用是开发高性能 GUI 应用的重要组成部分。为了避免频繁创建和销毁线程带来的资源消耗&#xff0c;Qt 提供了 线程池&#xff08;QThreadPool&#xff09; 和 可运行任务&#xff08;QRunnable&#xff09; 的机制&#xff0c;帮助我们更加高效地…