qt QSyntaxHighlighter详解

1、概述

QSyntaxHighlighter是Qt文本处理框架中的一个强大工具,它专门用于实现文本编辑器中的语法高亮功能。通过自定义高亮规则,QSyntaxHighlighter可以实现对代码编辑器、富文本编辑器中的关键字、注释等内容的高亮显示。这一功能对于提升代码的可读性和编辑效率具有重要意义。

2、重要方法
  • QSyntaxHighlighter(QObject *parent):通过父对象构造。
  • QSyntaxHighlighter(QTextDocument *parent):通过文本文档构造。
  • void setDocument(QTextDocument *doc):设置语法高亮器关联的文本文档。
  • QTextDocument *document()const:返回语法高亮器关联的文本文档
  • virtual void highlightBlock(const Qstring &text):纯虚函数,需要在子类中实现,用于高亮显示指定文本块。
     
//.h
class SyntaxHighlighter : public QSyntaxHighlighter
{Q_OBJECTpublic:SyntaxHighlighter(QTextDocument *parent = nullptr);protected:void highlightBlock(const QString &text) override;private:void setupHighlightingRules();struct HighlightingRule{QRegExp pattern;QTextCharFormat format;};QVector<HighlightingRule> highlightingRules;QTextCharFormat keywordFormat;QTextCharFormat commentFormat;
};//.cpp
SyntaxHighlighter::SyntaxHighlighter(QTextDocument *parent): QSyntaxHighlighter(parent)
{setupHighlightingRules();
}void SyntaxHighlighter::setupHighlightingRules()
{HighlightingRule rule;// 关键字高亮规则keywordFormat.setForeground(Qt::blue);keywordFormat.setFontWeight(QFont::Bold);QStringList keywordPatterns;keywordPatterns << "\\bint\\b" << "\\bfloat\\b" << "\\bdouble\\b" << "\\bchar\\b"<< "\\bvoid\\b" << "\\bif\\b" << "\\belse\\b" << "\\bfor\\b"<< "\\bwhile\\b" << "\\breturn\\b";foreach (const QString &pattern, keywordPatterns) {rule.pattern = QRegExp(pattern);rule.format = keywordFormat;highlightingRules.append(rule);}// 注释高亮规则commentFormat.setForeground(Qt::darkGray);commentFormat.setFontItalic(true);rule.pattern = QRegExp("//[^\n]*");rule.format = commentFormat;highlightingRules.append(rule);
}void SyntaxHighlighter::highlightBlock(const QString &text)
{foreach (const HighlightingRule &rule, highlightingRules) {QRegExp expression(rule.pattern);int index = expression.indexIn(text);while (index >= 0) {int length = expression.matchedLength();setFormat(index, length, rule.format);index = expression.indexIn(text, index + length);}}
}//main.cpp
int main(int argc, char *argv[])
{QApplication a(argc, argv);QTextEdit textEdit;textEdit.setPlainText("int main() { if (true) { return 0; } }"); // 设置示例文本// 创建并应用Highlighter实例SyntaxHighlighter *highlighter = new SyntaxHighlighter(textEdit.document());textEdit.show();return a.exec();
}

觉得有帮助的话,打赏一下呗。。

           

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

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

相关文章

第二天python笔记

Print(内容) Print(value,…,sep ,end\,n,fileNone) 字符串不管用几个单引号或双引号都能输出 sep是分隔符&#xff0c;逗号 默认显示空格分隔, 号可以连接前后’字符串’&#xff0c;不用写sep end是结束语 Chr()ascll值转字母文字 Ord()查找这个的ascll值 #单行注释,快…

方案丨车险保单OCR:3秒钟完成保单审核

在涉及车辆交易的各种情况下&#xff0c;记录和管理车险保单信息是一项必不可少的任务。然而&#xff0c;面对数量庞大的电子保单&#xff0c;传统的手工录入方式显得尤为低效——它不仅消耗大量时间&#xff0c;而且容易出现错误&#xff0c;这不仅影响了用户的满意度&#xf…

【数据结构】汇编 、机器语言 高级语言 简析。

汇编语言、机器语言和高级语言 1. 机器语言&#xff08;Machine Language&#xff09; 定义&#xff1a;机器语言是计算机能够直接执行的、用二进制编码的指令集&#xff0c;属于最低级别的编程语言。它由 0 和 1 组成&#xff0c;每条指令由一串二进制数表示。机器语言与计算…

有效提升网站流量的SEO技巧分享

内容概要 在数字时代&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;已经成为提升网站曝光度和吸引访问者的重要工具。SEO的核心目标是通过优化网站的各个方面&#xff0c;提高在搜索引擎结果页面上的排名&#xff0c;从而获得更多的自然流量。有效的SEO策略能够让您在激…

【go从零单排】JSON序列化和反序列化

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在 Go 语言中&#xff0c;处理 JSON 数据主要依赖于 encoding/json 包。这个包提…

虚幻引擎 CEO 谈元宇宙:发展、策略与布局

在当今科技领域&#xff0c;元宇宙无疑是最热门的话题之一。Epic Games 首席执行官 Tim Sweeney 对元宇宙的未来发展充满信心&#xff0c;他认为开放元宇宙将融合娱乐、游戏和科技产业&#xff0c;带来一个光明的未来。本文将深入探讨采访中的关键内容&#xff0c;分析元宇宙的…

QT自定义控件封装

QT自定义控件封装 1.概述 这篇文章介绍如何创建UI文件&#xff0c;通过自定义方式将两个控件联动起来&#xff0c;实现自定义功能。 2.创建UI文件 新建一个widget的普通项目&#xff0c;然后在项目名称上右键选择And New... 新建文件&#xff0c;然后选择QT 再选择Qt Desig…

王鹤棣演唱会即将泰国开唱,从原点走向未来,兑现与粉丝之约

对喜爱王鹤棣的粉丝来说&#xff0c;12月28日注定是个令人激动的日子&#xff0c;因为这天&#xff0c;王鹤棣即将在泰国曼谷举办D.Party演唱会&#xff0c;这一消息一经官宣&#xff0c;便引发大量中国以及东南亚地区粉丝欢呼&#xff0c;大家对王鹤棣此次演唱会表现出超常热情…

游戏引擎学习第五天

这节貌似没讲什么 视频参考:https://www.bilibili.com/video/BV1Gmm2Y5EwE/ uint8 *A somewhere in memory; uint8 *B somewhere in memory;//BEFORE WE GOT TO HERE int Y *B; // whatever was actually there before the 5 *A 5; int X *B; // 5 //Obviously! Y and …

<项目代码>YOLOv7 草莓叶片病害识别<目标检测>

YOLOv7是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv7具有更高的…

stm32 ADC实例解析(3)-多通道采集互相干扰的问题

文章目录 一、问题现象&#xff1a;二、原因分析&#xff1a;1、测量值不准问题分析&#xff1a;2、采样干扰问题分析 三、解决办法&#xff1a;1、硬件&#xff1a;&#xff08;1&#xff09;、电源供电&#xff08;2&#xff09;、引脚电容&#xff08;3&#xff09;、减少采…

[SaaS] 数禾科技 AIGC生成营销素材

https://zhuanlan.zhihu.com/p/923637935https://zhuanlan.zhihu.com/p/923637935

android studio 轮询修改对象属性(修改多个textview的text)

android studio版本&#xff1a;23.3.1 例程名称&#xff1a;loopsettextviewtext 这几天在帮一个朋友做个数独小游戏&#xff0c;如下图&#xff1a; 要可以玩自定义游戏&#xff0c;点击清空后&#xff0c;所以数字要清除。 要把所有的内容清空&#xff0c;一共有81个text…

PIC16F648A-I/SS 8位微控制器 -MCU 微芯 PIC16F648AT-I/SS 8位微控制器 -MCU 完全可替代PIC16F648

在这种情况下&#xff0c;微芯PIC16F627A-I/SS可以被视为是微芯PIC16F648AT-I/SS的一个兼容替代品。它们具有相似的功能和特性&#xff0c;包括相同的8位MCU架构、相似的存储器大小和RAM大小&#xff0c;以及相似的输入/输出端口数量。因此&#xff0c;如果您需要替换PIC16F648…

Linux(CentOS)项目总结(前后端分离)

项目情况&#xff1a; 前端开发&#xff1a;vue3 vite ts VSCode后端开发&#xff1a;JDK17 Spring Boot 3 Mybatis Maven IDEA数据库&#xff1a;MySQL8.4.3 SQLyog代码管理&#xff1a;Git虚拟环境&#xff1a;VMware远程登录&#xff1a;FinalShell服务器操作系统&…

C# 选择文件夹路径

通过C#代码&#xff0c;调出windows风格的文件夹选择框。提供界面来选择指定文件夹&#xff0c;并将文件夹完整路径以字符串形式返回。 示例&#xff1a; 代码&#xff1a; #region 选择指定文件夹 string folderPath ""; FolderBrowserDialog folderBrowserDialo…

容器docker的ulimit

Ulimit 在linux里ulimit命令可以对shell生成的进程的资源进行限制。 常用的ulimit限制 打开文件句柄数core文件大小设置进程能够消耗的虚拟内存设置用户能够打开的进程数目 不太常用的ulimit限制 设置数据段的最大值.单位:kbytes 设置创建文件的最大值.单位:blocks 设置在…

unity3d————协程原理讲解

1.协程的本质 协程可以分成两部分1.协程函数本体 2.协程调度器 协程本体就是一个能够中间暂停返回的函数 协程调度器是Unity内部实现的&#xff0c;会在对应的时机帮助我们继续执行协程函数 Unity只实现了协程调度部分协程的本体本质上就是一个 C#的迭代器方法 2.协程本体是…

丹摩征文活动|CogVideoX-2b:从0到1,轻松完成安装与部署!

丹摩征文活动 | CogVideoX-2b&#xff1a;从0到1&#xff0c;轻松完成安装与部署&#xff01; CogVideoX 介绍 CogVideoX的问世&#xff0c;标志着视频制作技术迈入了一个全新的时代。它不仅打破了传统视频制作在效率与质量之间的平衡难题&#xff0c;还通过其先进的3D变分自…

vite构建的react程序放置图片

在 Vite 中&#xff0c;将图片放置在 public 文件夹中可以直接使用相对路径&#xff08;如 /logo.png&#xff09;的原因主要与 Vite 的构建和资源处理方式有关。以下是详细的解释&#xff1a; 1. 公共访问性 public 文件夹中的文件在构建过程中不会被 Vite 处理或哈希化。这…