富文本之语法高亮

我们实现语法高亮的时候用到Qt自带的一个类,是QSyntaxHighlighter类实现,在输出字的时候查找关键字设置高亮。

添加新文件:

自定义文件,将QSyntaxHighlighter作为基类 

MySyntaxHighlighter头文件:

#ifndef MYSYNTAXHIGHLIGHTER_H
#define MYSYNTAXHIGHLIGHTER_H

#include<QSyntaxHighlighter>
class MySyntaxHighlighter : public QSyntaxHighlighter
{
    Q_OBJECT
public:
    MySyntaxHighlighter(QTextDocument* parent=0);
protected:
    void highlightBlock(const QString&text);
};

#endif // MYSYNTAXHIGHLIGHTER_H

增加元对象Q_object,增加参数QTextDocument* parent,用来初始化父类。

重写高亮函数highlightBlock()

MySyntaxHighlighter源文件:

#include "mysyntaxhighlighter.h"

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

}

//重写高亮方法
void MySyntaxHighlighter::highlightBlock(const QString &text)
{
    QTextCharFormat format;//定义一个字符格式
    format.setFontWeight(QFont::Bold);
    format.setBackground(Qt::lightGray);
    format.setForeground(Qt::blue);

    QString pattern="\\bgood\\b";//将good作为关键字
    QRegExp expression(pattern);
    int index=text.indexOf(expression);//将文本与表达式匹配,如果匹配到了就返回字符出现的位置,没有就返回-1
    while(index>=0){
        int length=expression.matchedLength();//匹配到的字符长度
        setFormat(index,length,format);
        index=text.indexOf(expression,index+length);
    }
}

高亮重写,先设定一个字符格式对象format,再进一步设置字体格式,设置好之后再定义一个字符串pattern匹配good,\\b表示字体边界,又再用QRegExp定义一个正则表达式对象,indexof会返回第一次匹配到指定下标字符串的位置,如果没有匹配到就返回-1结束训话。高亮的操作还是离不开setFormat函数。

在mainwindow头文件添加一个成员:

  MySyntaxHighlighter *m_slighter;//语法高亮对象

 mainwindow构造函数添加代码:

  //初始化高亮对象
    m_slighter=new MySyntaxHighlighter(ui->textEdit->document());

高亮效果:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值