背景
在构建富文本编辑器时,错误高亮与提示功能是一项非常重要的交互设计,特别是在开发文本编辑器、代码 IDE 或拼写检查工具时。
本文基于Qt 框架,介绍三种主流的文本高亮技术方案,分别是:
- 使用 QSyntaxHighlighter
- 使用 mergeCharFormat
- 使用 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。