Qt学习------语法高亮与HTML

定义:

  • 使用Qt Creator编辑代码时可以发现,输入关键字时会显示不同的颜色,这就是所谓的语法高亮。

实现方法:

Qt的富文本处理中提供了QSyntaxHighlighter类来实现语法高亮。
为了实现这个功能,需要创建QSyntaxHighlighter类的子类,然后重新实现highlightBlock( )函数,使用时直接将QTextDocument类对象指针作为其父部件指针,这样就可以自动调用highlightBlock( )函数了。


代码区:

  • 第1步:新建QWidgets应用,基类选择QMainWindow,然后往项目里面添加一个模板C++ Class,类名为MySyntaxHighlighter,基类手动设置为QSyntaxHighlighter。完成后更改mysyntaxhighlighter.h如下:
#ifndef MYSYNTAXHIGHLIGHTER_H
#define MYSYNTAXHIGHLIGHTER_H

#include <QSyntaxHighlighter>
class MySyntaxHighlighter : public QSyntaxHighlighter
{
    Q_OBJECT
public:
    explicit MySyntaxHighlighter(QTextDocument * parent = 0);

protected:
    void highlightBlock(const QString &text);      // 必须重新实现该函数
};

#endif // MYSYNTAXHIGHLIGHTER_H
  • 现在到mysyntaxhighlighter.cpp更改如下:
#include "mysyntaxhighlighter.h"

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

}

void MySyntaxHighlighter::highlightBlock(const QString &text)     // 高亮文本块,每当编辑器中的文本改变时就会调用改函数
{
    QTextCharFormat myFormat;                // 字符格式
    myFormat.setFontWeight(QFont::Bold);     // 设置加粗字体
    myFormat.setForeground(Qt::green);       // 将前景画笔设置为指定的画笔。前景画笔主要用于渲染文本
    QString parent = "\\bchar\\b";           // 要匹配的单词,这里是"char"单词
    QRegExp expression(parent);              // 创建正则表达式
    int index = text.indexOf(expression);    // 从位置0(默认)开始匹配字符串
    // 如果匹配成功,那么返回为字符串的起始位置,它大于或等于0
    while(index >= 0) {
        int length = expression.matchedLength();  //要匹配字符串的长度
        setFormat(index, length, myFormat);       // 对要匹配的字符串设置格式
        index = text.indexOf(expression, index + length);   // 继续匹配
    }
}
  • 这里主要使用了正则表达式和QString类的index( )函数来进行字符串匹配,如果匹配成功,则使用QSyntaxHighlighter类的setFormat( )函数来设置字符格式。

  • 第2步:向界面拖入一个Text Edit,并在mainwindow.h中添加类的前置声明

class MySyntaxHighlighter;
  • 然后添加私有对象指针:
MySyntaxHighlighter * highlighter;
  • mainwindow.cpp添加头文件:
#include "mysyntaxhighlighter.h"
  • 然后在MainWindow (mainwindow.cpp中)类构造函数的最后添加一行代码:
highlighter = new MySyntaxHighlighter(ui->textEdit->document());

几点说明:

  • 这里创建了MySyntaxHighlighter类的对象,并且使用编辑器(Text Edit)的文档对象指针作为其参数(父部件),这样每当编辑器中的文本改变时都会调用highlightBlock( )函数;来设置语法高亮。现在运行程序,输入“char”查看效果。
    • 关于语法高亮,可以查看Syntax Highlighter Example示例程序。

HTML

  • 在富文本处理中还提供了对HTML子集的支持,可以在QLabel或者QText Edit添加文本时使用HTML标签或者CSS属性,具体内容可以在帮助中通过Supported HTML Subset关键字查看,下面给出一个最简单的例子。
  • mainwindow.cpp文件中的构造函数最后添加下面一行代码:
ui->textEdit->append(tr("< h1 > <font color = red > 使用HTML < /font > < /h1 >"));  // 在末尾添加字符串

这里往编辑器最后添加了文本,并且使用了HTML标签,运行程序查看效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值