QSyntaxHighlighter使用

有时候需要用到高亮 QSyntaxHighlighter一个参数为QTextDocument为参数的构造函数:

QSyntaxHighlighter(document)

重写虚函数,以下是官方文档例子,该虚函数当文本块改变时候触发

void MyHighlighter::highlightBlock(const QString &text)
  {
      QTextCharFormat myClassFormat;
      myClassFormat.setFontWeight(QFont::Bold);
      myClassFormat.setForeground(Qt::darkMagenta);

      QRegularExpression expression("\\bMy[A-Za-z]+\\b");
      QRegularExpressionMatchIterator i = expression.globalMatch(text);
      while (i.hasNext())
      {
        QRegularExpressionMatch match = i.next();
        setFormat(match.capturedStart(), match.capturedLength(), myClassFormat);
      }
  }

以下是自己根据上面当函数做当一个事例

#ifndef MYHIGHER_H
#define MYHIGHER_H

#include <QWidget>
#include <QSyntaxHighlighter>
#include <QTextDocument>

class MyHigher : public QSyntaxHighlighter
{
    Q_OBJECT
public:
    explicit MyHigher(QTextDocument *parent = nullptr);
    void highlightBlock(const QString &text);

signals:

public slots:

};

#endif // MYHIGHER_H
#ifndef MYHIGHLIGHTCODER_H
#define MYHIGHLIGHTCODER_H

#include <QWidget>
#include <QPlainTextEdit>
#include "myhigher.h"

class MyHighlightCoder : public QPlainTextEdit
{
    Q_OBJECT
public:
    explicit MyHighlightCoder(QWidget *parent = nullptr);

signals:

public slots:

private:
    MyHigher * higher;
};

#endif // MYHIGHLIGHTCODER_H
#include "myhigher.h"
#include <QSyntaxHighlighter>
#include <QRegularExpression>
#include <QDebug>

MyHigher::MyHigher(QTextDocument *parent) : QSyntaxHighlighter(parent)
{

}

void MyHigher::highlightBlock(const QString &text){
    qDebug()<< text;
    QTextCharFormat myClassFormat;
      myClassFormat.setFontWeight(QFont::Bold);
      myClassFormat.setForeground(Qt::blue);

      QRegularExpression expression("\\bMy[A-Za-z]+\\b");
      QRegularExpressionMatchIterator i = expression.globalMatch(text);
      while (i.hasNext())
      {
        QRegularExpressionMatch match = i.next();
        setFormat(match.capturedStart(), match.capturedLength(), myClassFormat);
      }
}
#include "myhighlightcoder.h"

MyHighlightCoder::MyHighlightCoder(QWidget *parent) : QPlainTextEdit(parent)
{
    QTextDocument * document = this->document();
    this->higher = new MyHigher(document);

}

实际会将setFormat方法当执行,也就是改变文本的高亮步奏,通过实际具体的规则进行匹配,不同的类型的关键字配置不通的颜色

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值