[Qt] 自定义语法高亮

本文介绍如何在Qt环境中自定义编程语言的语法高亮显示,通过Qt自带的Syntax Highlighter Example示例,讲解如何制作NY系列的语法高亮,并详细展示了创建父类Q-Code和子类Ny5Highlight的步骤,以及运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编写自定义的语法高亮显示

大多数常见的编程语言都有与之相匹配的IDE(如Visual Sutdio、Eclipse),或者可以语法高亮显示的编辑器(如 UltraEdit,Notepad,Vim)。
但比较少用的或者冷门的编程语言就不一定有对应的语法高亮编辑器,或者说,其自带的编辑器效果很渣渣 ?。
其实大部分语法高亮显示的编辑器(如 UltraEdit,Notepad,Vim)都支持自定义的语法高亮,不过要自己去编写高亮规则。对我而已,总会觉得自己造一个总比从别人那里拿来用更趁手。所以还是自己弄个简单编辑器来试试看吧。

Qt 自带的例子

在 Qt 的帮助中输入“Syntax Highlighter Example”就可以找到官方自带的例子。
在帮助中寻找官方例子
在 Qt Creator “欢迎” 的 “示例” 内容中,输入 “Syntax Highlighter Example” 就可以将整个Demo工程加载出来。
打开Demo工程

官方的说明和Demo工程里面都有非常详细的解答,接下来,就是要做自己需要的语法高亮定义了。

制作NY系列的语法高亮

鉴于我当前的工作是单片机,有些芯片自带的IDE并不怎么理想,加上有很多代码内容无法简略,类似复制黏贴,所以还是自己制作一些小工具简化一些工作内容,配上对应的语法高亮更容易查看结果。
目前用的是NY系列的,所以就弄个NY系列的语法高亮,下面以NY5的Q-Code语法为例子进行处理。

父类 Q-Code 的语法高亮

整个NY语法大致一样,只有部分关键字不同而已,所以就在父类定义相同的方法,留下虚函数设置关键字给子类重写。
自己写的代码有待提高,看到能运行就没进行优化了?,若有宝贵的意见欢迎留言。

创建NY语法高亮父类:NyHighlight

NyHighlight.h

#ifndef NYHIGHLIGHT_H
#define NYHIGHLIGHT_H

#include <QSyntaxHighlighter>
#include <QRegularExpression>
#include <QTextCharFormat>
#include <QStringList>
#include <QVector>

class NyHighlight : public QSyntaxHighlighter
{
   
   
    Q_OBJECT

public:
    NyHighlight(QTextDocument *parent=0);
    virtual ~NyHighlight();

    virtual void setKeyWord(void) = 0;
    virtual void setComment(void);
    virtual void setVariable(void);
    virtual void setOperator(void);
    virtual void setLabel(void);
    virtual void setNumber(void);
    void appendKeyWordList(QStringList &list, QTextCharFormat &format);
    void appendKeyWord(QString pattern, QTextCharFormat &format);

protected:
    void highlightBlock(const QString &text) override;

//private:
    struct HighlightingRule
    {
   
   
        QRegularExpression pattern;
        QTextCharFormat format;
    };
    QVector<HighlightingRule> highlightingRules;

};

#endif // NYHIGHLIGHT_H

NyHighlight.cpp

#include "nyhighlight.h"

#include <QRegularExpressionMatchIterator>

NyHighlight::NyHighlight(QTextDocument *parent)
    : QSyntaxHighlighter(parent)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值