阅读 181

QTextEdit实现自定义关键字着色(代码块着色)

一、功能介绍

在使用QTextEdit 编辑或者显示文本的过程中,经常需要实现关键字、或者指定的一些文本着色,显示高亮颜色,突出显示。 比如: 我们经常编写代码的IDE软件,界面上就可以根据不同的语言、不同的关键字完成各种颜色的高亮,这个功能QT的QTextEdit 完全也可以实现,并且QT官方也给出了例子代码。这篇文章参考官方提供的例子代码思路,继承QSyntaxHighlighter 类,重写highlightBlock函数,设置自己的关键字。

设置的着色文本支持正则表达式语句,核心代码示例如下:

void Highlighter::highlightBlock(const QString &text) {     if(word_text.isEmpty())return;     QTextCharFormat myClassFormat;     myClassFormat.setFontWeight(QFont::Bold);     myClassFormat.setForeground(Qt::darkMagenta);     //支持正则表达式     QString pattern = word_text;     QRegExp expression(pattern);     int index = text.indexOf(expression);     while (index >= 0) {         int length = expression.matchedLength();         setFormat(index, length, myClassFormat);         index = text.indexOf(expression, index + length);     } } 复制代码

image.png

image.png

二、实现方法

2.1 Highlighter.cpp

这是CPP源文件,继承QSyntaxHighlighter类。

 #include "highlighter.h" //! [0] Highlighter::Highlighter(QTextDocument *parent)     : QSyntaxHighlighter(parent) { } void Highlighter::highlightBlock(const QString &text) {     if(word_text.isEmpty())return;     QTextCharFormat myClassFormat;     myClassFormat.setFontWeight(QFont::Bold);     myClassFormat.setForeground(Qt::darkMagenta);     QString pattern = word_text;     QRegExp expression(pattern);     int index = text.indexOf(expression);     while (index >= 0) {         int length = expression.matchedLength();         setFormat(index, length, myClassFormat);         index = text.indexOf(expression, index + length);     } } /* 工程: QTextEdit_Highlight_test 日期: 2021-10-30 作者: DS小龙哥 环境: win10 QT5.12.6 MinGW32 功能: 高亮的文本设置 */ void Highlighter::SetText(QString text) {     word_text=text; } 复制代码

2.2 Highlighter.h

 #ifndef HIGHLIGHTER_H #define HIGHLIGHTER_H #include <QSyntaxHighlighter> #include <QTextCharFormat> QT_BEGIN_NAMESPACE class QTextDocument; QT_END_NAMESPACE //! [0] class Highlighter : public QSyntaxHighlighter {     Q_OBJECT public:     Highlighter(QTextDocument *parent = 0);     void SetText(QString text); protected:     void highlightBlock(const QString &text) Q_DECL_OVERRIDE;     QString word_text; }; //! [0] #endif // HIGHLIGHTER_H 复制代码

2.3 widget.cpp

#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent)     : QWidget(parent)     , ui(new Ui::Widget) {     ui->setupUi(this);     highlighter = new Highlighter(ui->textEdit->document()); } Widget::~Widget() {     delete ui; } /* 工程: QTextEdit_Highlight_test 日期: 2021-10-30 作者: DS小龙哥 环境: win10 QT5.12.6 MinGW32 功能: 设置高亮的文本 */ void Widget::on_pushButton_clicked() {     highlighter->SetText(ui->lineEdit->text()); } 复制代码

2.4 widget.h

#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include "highlighter.h" QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget {     Q_OBJECT public:     Widget(QWidget *parent = nullptr);     ~Widget();     Highlighter *highlighter; private slots:     void on_pushButton_clicked(); private:     Ui::Widget *ui; }; #endif // WIDGET_H 复制代码

2.5 UI设计界面

image.png


作者:DS小龙哥
链接:https://juejin.cn/post/7025403946759880711


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐