深入解析:【QT】`QTextCursor::insertText()`中插入彩色文本

news/2025/10/8 16:38:30/文章来源:https://www.cnblogs.com/lxjshuju/p/19129797

在 Qt 的 QTextEdit 中,QTextCursor::insertText() 默认只能插入纯文本。要插入彩色文本,需要配合使用 QTextCharFormat 来设置文本格式。以下是几种实现彩色文本插入的方法:

方法 1:使用 QTextCharFormat 设置文本颜色

// 创建文本格式对象
QTextCharFormat format;
format.setForeground(QBrush(Qt::red)
)
;
// 设置文本颜色为红色
// 获取光标并插入带格式的文本
QTextCursor cursor = ui->textEdit->
textCursor(
)
;
cursor.insertText("这是红色文本"
, format)
;
// 插入彩色文本
// 继续插入默认颜色的文本
cursor.insertText(" 这是默认颜色文本"
)
;

方法 2:修改当前光标的字符格式

QTextCursor cursor = ui->textEdit->
textCursor(
)
;
// 保存当前格式
QTextCharFormat originalFormat = cursor.charFormat(
)
;
// 创建新格式
QTextCharFormat colorFormat;
colorFormat.setForeground(Qt::blue)
;
// 应用新格式
cursor.setCharFormat(colorFormat)
;
cursor.insertText("蓝色文本"
)
;
// 恢复原始格式
cursor.setCharFormat(originalFormat)
;
cursor.insertText(" 默认颜色文本"
)
;

方法 3:使用 HTML 格式插入彩色文本

// 直接插入 HTML
ui->textEdit->
append("<span style='color:green;'>绿色文本</span>"
)
;
// 或在光标位置插入
QTextCursor cursor = ui->textEdit->
textCursor(
)
;
cursor.insertHtml("<span style='color:#FF8800;'>橙色文本</span>"
)
;

方法 4:创建带格式的文本片段(更高级用法)

// 创建文档片段
QTextDocumentFragment fragment = QTextDocumentFragment::fromHtml(
"<span style='color:purple; font-weight:bold;'>紫色粗体文本</span>"
)
;
// 插入片段
QTextCursor cursor = ui->textEdit->
textCursor(
)
;
cursor.insertFragment(fragment)
;

注意事项:

  1. 格式作用范围

  2. HTML 限制

  3. 性能考虑

完整示例:在 QTextEdit 中显示多色文本

void addColoredText(QTextEdit* textEdit,
const QString& text,
const QColor& color) {
QTextCursor cursor(textEdit->
textCursor(
)
)
;
cursor.movePosition(QTextCursor::End)
;
QTextCharFormat format;
format.setForeground(color)
;
cursor.insertText(text, format)
;
}
// 使用示例
addColoredText(ui->textEdit, "错误: "
, Qt::red)
;
addColoredText(ui->textEdit, "文件未找到\n"
, Qt::black)
;
addColoredText(ui->textEdit, "警告: "
, Qt::darkYellow)
;
addColoredText(ui->textEdit, "内存使用过高\n"
, Qt::black)
;

替代方案:使用 QSyntaxHighlighter

如果需要实现语法高亮(如代码编辑器),更好的选择是继承 QSyntaxHighlighter

class Highlighter : public QSyntaxHighlighter {
public:
Highlighter(QTextDocument* parent) : QSyntaxHighlighter(parent) {
}
protected:
void highlightBlock(
const QString& text)
override {
// 设置错误文本格式
QTextCharFormat errorFormat;
errorFormat.setForeground(Qt::red)
;
// 匹配错误模式
QRegularExpression regex("\\bERROR\\b"
)
;
QRegularExpressionMatchIterator it = regex.globalMatch(text)
;
while (it.hasNext(
)
) {
QRegularExpressionMatch match = it.next(
)
;
setFormat(match.capturedStart(
)
, match.capturedLength(
)
, errorFormat)
;
}
}
}
;
// 使用
Highlighter* highlighter =
new Highlighter(ui->textEdit->
document(
)
)
;

总结:虽然 insertText() 本身不能直接插入彩色文本,但配合 QTextCharFormat 或 HTML 方法可以轻松实现彩色文本显示。根据需求选择合适的方法:

  • 简单颜色变化:使用 QTextCharFormat
  • 复杂格式:使用 HTML
  • 语法高亮:使用 QSyntaxHighlighter

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/931717.shtml

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

相关文章

Java方法专题 - 动手动脑问题与实验总结

一、随机数生成相关实验 动手动脑1:纯随机数发生器实现 问题要求: 编写一个方法,使用线性同余算法生成指定数目(比如1000个)的随机整数。 算法参数:Modulus = 2 - 1 = int.MaxValue Multiplier = 7⁵ = 16807 C …

2025年中盘点

工作近况 转组有半年了,好久没来写东西了。 第一个产品被reorg了,我的第一份工作在的第一个岗位就戛然而止了。诚实来讲第一个组还是不错的。WLB顶级,领导信任,同事们鼎力配合,这完全是what my dream company sho…

学习问题日记-3

在学习Docker过程中,在linux上安装docker的时候,为了进行docker仓库换源,执行了以下命令之后遇到了一个报错。 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo y…

怎么用dw英文版做网站wordpress新增文章小工具

近几年&#xff0c;随着大数据和人工智能技术的发展&#xff0c;智能化、程序化营销在国内获得高速发展。从以创意内容、提升效率的工具到现在驱动企业数字化转型的智能营销&#xff0c;营销云在国内的热度与成熟度不断提升。营销云起源于“Enterprise Marketing Software Suit…

商城网站建站方案汕头 做网站

京准电钟&#xff5c;基于纳秒级的GPS北斗卫星授时服务器 京准电钟&#xff5c;基于纳秒级的GPS北斗卫星授时服务器 你有没有思考过这样一个问题&#xff1a;火车站内&#xff0c;熙熙攘攘&#xff0c;旅客排队进站、列车停靠发车&#xff0c;一切井然有序。一旦有个别时间出现…

企业网站建设网站优化网站跳出

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;【Web开发】CSS教学(超详细,满满的干货) &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 CSS一. 什么是CSS?1.1 基本语法规范1.2 引入方式1.3 规范 二. CSS选…

【CVE-2025-4123】Grafana完整分析SSRF和从xss到帐户接管 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

差分约束乘法改加减

洛谷P4926 [1007] 倍杀测量者#include<bits/stdc++.h> using namespace std; const int N=1010; const double INF=1e18; const double eps=1e-7; struct node{int v;double k;int tp; }; vector<node> ed…

01-方法-课后作业

Demo:MethodOverLoad展示了相同名称不同参数类型的方法,也叫做方法重载,在程序调用方法时会按照参数的类型而选择相应符合的方法。

域名建设好了怎么在建设网站创意设计图片素材

目录 一、Elasticsearch是什么&#xff1f; 二、为什么要使用ElasticSearch 2.1 关系型数据库有什么问题&#xff1f; 2.2 ElasticSearch有什么优势&#xff1f; 2.3 ES使用场景 三、ElasticSearch概念、原理与实现 3.1 搜索引擎原理 3.2 Lucene 倒排索引核心原理 倒排…

应用程序io接口

字符设备接口 字符设备只数据的存取和传输时以字符为单位的设备,比如键盘打印机,基本都是传输肃立比较低,不可寻址,并且在io时候,通常采取中断驱动的方式 块设备接口 块设备时至数据的存取和传输时以数据库为单位…

凡客网站登陆深圳工业设计培训班

转载自 如何设计一个高可用的运营系统 这是一篇来自粉丝的投稿&#xff0c;作者【林湾村龙猫】近一年在做关于运营活动方面的设计。本文是他的关于运营活动的总结&#xff0c;Hollis做了一点点修改。 概述 一个产品业务的发展总是离不开运营二字。随着业务快速的发展以及新…

深圳自助网站建设做网站的程序

在学习之前,一直以为WebService就是一个工具,在两个服务器之间建立一个通信,帮我们把需要传输的数据组织成规范的XML数据并发送到目的地,实际情况也确实是这样的,不过更高级一点的是,XFire不但可以帮我们生成XML发送,而且可以在接收了xml之后还可以直接返回对象给我们用…

【学习记录】Django Channels + WebSocket 异步推流编写常用命令汇总

【学习记录】Django Channels + WebSocket 异步推流编写常用命令汇总pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &qu…

边缘数据库近期想法(2)

近期读的这几篇论文主要是两种:对于边缘网络一些事务处理或的系统架构,其中关键在于协议的设计:边缘服务器上可扩展的数据管理、在无服务器的边缘网络架构可靠交易 一些大众研究内容适应性部署在边缘网络中以此提高…

方法-课后作业1

一、随机数生成实践 1. 自定义算法生成随机数:按纯随机数发生器参数(Modulus=2-1,Multiplier=16807,C=0),以公式xₙ₊₁=(a*xₙ + c) mod m编写方法,生成1000个随机整数,确定种子后循环计算即可。 2. 对比多种…

AgpdParty

AgpdParty3. 枚举类型 (1) 数据类型 typedef enum _eAGPMPARTY_DATA_TYPE {AGPMPARTY_DATA_TYPE_PARTY = 0, } eAGPMPARTY_DATA_TYPE;目前只定义了 Party 数据类型。(2) 经验分配类型 typedef enum _AgpmPartyCalcExpT…

io软件的层次结构

越往上越接近用户,每一次会利用下层提供的服务实现某些功能(类似计算机网络) 用户层软件 用户层软件实现与用户交互的借口,用户可以直接使用该层提供的,与io操作相关的库函数 用户层讲用户请求翻译成格式化的io请…

行业网站 cms手机版怎么用百度快照

一、题目描述 给你一个整数 n &#xff0c;请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,nul…

白城网站建设公司网站做seo第一步

文章目录 缓冲流字节缓冲流字符缓冲流 转换流InputStreamReader类OutputStreamWriter类 序列化ObjectOutputStream类ObjectInputStream类 打印流 缓冲流 缓冲流,也叫高效流&#xff0c;是对4个基本的 FileXxx 流的增强&#xff0c;所以也是4个流 基本原理&#xff1a; 缓冲流的…