【Qt】 实现文本高亮功能的三种技术方案

背景

在构建富文本编辑器时,错误高亮与提示功能是一项非常重要的交互设计,特别是在开发文本编辑器、代码 IDE 或拼写检查工具时。

本文基于Qt 框架,介绍三种主流的文本高亮技术方案,分别是:

  1. 使用 QSyntaxHighlighter
  2. 使用 mergeCharFormat
  3. 使用 ExtraSelection

目标

基础文本编辑器,它可以:

  • 高亮指定位置的错误文本
  • 支持多种高亮方式供切换
  • 一键清除所有样式

方案一:QSyntaxHighlighter

✅ 核心思想:

QSyntaxHighlighter 是 Qt 提供的专门用于语法高亮的类,自动在文档内容变化时调用高亮逻辑。

✅ 实现要点:

  • 创建一个继承自 QSyntaxHighlighter 的类。
  • 重写 highlightBlock 方法,根据每个文本块的起始位置判断是否有错误需要标记。
  • 通过 setFormat 为特定区域设置背景颜色等样式。

方案二:mergeCharFormat

✅ 核心思想:

直接使用 QTextCursor 对目标文本应用格式,合并到现有字符格式中,立即生效。

✅ 实现要点:

  • 使用 QTextCursor 设置目标范围。
  • 调用 mergeCharFormat 叠加背景色样式。

方案三:ExtraSelections

✅ 核心思想:

使用 QTextEdit::ExtraSelection 显示叠加样式,不改变文档实际内容,相当于临时性 UI 样式。

✅ 实现要点:

  • 构建多个 ExtraSelection,分别指定光标位置和格式。
  • 调用 QTextEdit::setExtraSelections 批量应用。

Demo演示

经验感悟

        如今随着AI大模型的流行,越来越多的AI应用就此诞生,原来以技术为主的客户端开发变得越来越以业务为主。围绕着AI应用开发,Qt对比前端技术有点吃力,一个关键问题是你不知道如何实现基于前端技术的那种效果,大部分Qt应用没有用到各种花哨的东西,当你真正开发一个AI类应用而且面向互联网用户的时候,如何设计并实现对应的效果需要进行深度思考。我最近重构了一个功能已经把ChatGpt问投降了。在AI时代,各端越来越多得开发文字处理类应用,本文介绍的就是一种类似校对软件或者编辑器软件甚至AI对话软件都能用到的一种技术类。

        如何以更少的努力构建出高可用的项目是一条新的技术思想。技术栈并不是越多越好,有时候一个技术栈能代替好几个技术栈例如Qt。软件开发第一原则是什么?首先你得运行起来跑起来 make it work 。假如你发现你用的技术点研究过后发现功能很难实现或者扩展,你实现一个功能需要实现一堆方法或维护一堆数据结构来实现就需要考虑自己用到的技术点是不是对的,你就要make it right,最后一步就是make it fast。一个比较完美的方案会让你减少很多代码量,那种努力通过各种算法维护一堆数据结构去计算去实现的功能往往是你没有make it right。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值