Qt Qsyntaxhighlighter给QTextEdit设置丰富的语法高亮格式

本文主要是介绍Qt Qsyntaxhighlighter给QTextEdit设置丰富的语法高亮格式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/*语法高亮* *包括关键字、函数、注释、@{}、全局变量等等*/#ifndef MYSYNTAXHIGHLIGHTER_H
#define MYSYNTAXHIGHLIGHTER_H
#include <QSyntaxHighlighter>
#include <QTextCharFormat>
//#include <QObject>
//#include <QRegExp>
#include <QTextEdit>
//#include <QVector>
//#include <QString>
//#include <global_operator.h>QT_BEGIN_NAMESPACE
class QTextDocument;
QT_END_NAMESPACEclass MySyntaxHighlighter:public QSyntaxHighlighter{Q_OBJECT
public:MySyntaxHighlighter(QTextDocument *parent = 0);void getKeywords(QString path,QTextEdit* show);//从系统库路径下获取关键字列表,返回信息到消息框void getFuncwords(QString path,QTextEdit* show);//从用户库目录下获取函数列表,返回信息到消息框public slots:void setGlobalListQueue(const QStringList& textQueue);//设置全局变量的高亮规则protected:void highlightBlock(const QString  &text) Q_DECL_OVERRIDE;
private:struct HighlightingRule{QRegExp pattern;QTextCharFormat format;};void setNormalTextFormat();void setDigitalFormat();void setKeyAndFuncFormat();void setAtFormat();void setGlobalFormat();void setStringFormat();void setCommentFormat();//    QString kPath;//好像暂时没什么用
//    QString fPath;void setGlobalListQueue();QVector<HighlightingRule> highlightingRules;//其它放在一个矢量里面QVector<HighlightingRule> globalHighlightRules;//全局变量会时刻变动,不跟其它语法高亮共用一个矢量QVector<HighlightingRule> atHighlightRules;//艾特的单独存一个矢量里面//这四个称作其它变量QTextCharFormat normalTextFormat;//普通文本的样式QTextCharFormat digitalFormat;//数字样式QTextCharFormat keywordFormat;//关键字高亮规则QTextCharFormat functionFormat;//函数高亮QTextCharFormat globalVarFormat;//全局变量高亮QTextCharFormat atFormat;//@{}式子高亮//这s三个不需要矢量QTextCharFormat commentFormat;//注释高亮QTextCharFormat multiLineCommentFormat;//块状注释高亮QTextCharFormat stringFormat;//字符串高亮//枚举块状注释开始、块状注释结束、单行注释和字符串enum symbolType{nothing = -1,comBegin = 0,singleCom,aString};enum symbolType getFirstSymbolTypeOf(QString tContext, int tIndex );//判断tContext中,从tIndex开始,最先出现哪个符号//如果where在有效区块结束符号*)后面(where>0)或者在previousBlockState=0的行(where=0),则对后面进行一系列检查void checkFromHere(QString text, int where);//如果区块在where开始,则对后面进行一系列检查void blockFromHere (QString text, int where);//    int startIndex;
//    int pos;//检查行末的状态
//    bool lastCharInSingle = false;
//    bool lastCharInBlock = false;
//    bool lastCharInNormal = false;//既不属于字符串又不属于注释
};#endif // MYSYNTAXHIGHLIGHTER_H








#include <QtGui>
#include <QRegExp>
#include <QFont>
#include <QFile>
//#include <algorithm>#include "mysyntaxhighlighter.h"
//#include <QDialog>
//#include <QMessageBox>
//#include <QApplication>
//#include <queue&g

这篇关于Qt Qsyntaxhighlighter给QTextEdit设置丰富的语法高亮格式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/549792

相关文章

如何设置vim永久显示行号

《如何设置vim永久显示行号》在Linux环境下,vim默认不显示行号,这在程序编译出错时定位错误语句非常不便,通过修改vim配置文件vimrc,可以在每次打开vim时永久显示行号... 目录设置vim永久显示行号1.临时显示行号2.永www.chinasem.cn久显示行号总结设置vim永久显示行号在li

Linux:alias如何设置永久生效

《Linux:alias如何设置永久生效》在Linux中设置别名永久生效的步骤包括:在/root/.bashrc文件中配置别名,保存并退出,然后使用source命令(或点命令)使配置立即生效,这样,别... 目录linux:alias设置永久生效步骤保存退出后功能总结Linux:alias设置永久生效步骤

IDEA如何将String类型转json格式

《IDEA如何将String类型转json格式》在Java中,字符串字面量中的转义字符会被自动转换,但通过网络获取的字符串可能不会自动转换,为了解决IDEA无法识别JSON字符串的问题,可以在本地对字... 目录问题描述问题原因解决方案总结问题描述最近做项目需要使用Ai生成json,可生成String类型

Spring MVC如何设置响应

《SpringMVC如何设置响应》本文介绍了如何在Spring框架中设置响应,并通过不同的注解返回静态页面、HTML片段和JSON数据,此外,还讲解了如何设置响应的状态码和Header... 目录1. 返回静态页面1.1 Spring 默认扫描路径1.2 @RestController2. 返回 html2

基于Qt Qml实现时间轴组件

《基于QtQml实现时间轴组件》时间轴组件是现代用户界面中常见的元素,用于按时间顺序展示事件,本文主要为大家详细介绍了如何使用Qml实现一个简单的时间轴组件,需要的可以参考下... 目录写在前面效果图组件概述实现细节1. 组件结构2. 属性定义3. 数据模型4. 事件项的添加和排序5. 事件项的渲染如何使用

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

Linux中chmod权限设置方式

《Linux中chmod权限设置方式》本文介绍了Linux系统中文件和目录权限的设置方法,包括chmod、chown和chgrp命令的使用,以及权限模式和符号模式的详细说明,通过这些命令,用户可以灵活... 目录设置基本权限命令:chmod1、权限介绍2、chmod命令常见用法和示例3、文件权限详解4、ch

SpringBoot项目引入token设置方式

《SpringBoot项目引入token设置方式》本文详细介绍了JWT(JSONWebToken)的基本概念、结构、应用场景以及工作原理,通过动手实践,展示了如何在SpringBoot项目中实现JWT... 目录一. 先了解熟悉JWT(jsON Web Token)1. JSON Web Token是什么鬼

使用Spring Cache时设置缓存键的注意事项详解

《使用SpringCache时设置缓存键的注意事项详解》在现代的Web应用中,缓存是提高系统性能和响应速度的重要手段之一,Spring框架提供了强大的缓存支持,通过​​@Cacheable​​、​​... 目录引言1. 缓存键的基本概念2. 默认缓存键生成器3. 自定义缓存键3.1 使用​​@Cacheab