欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > qt QSyntaxHighlighter详解

qt QSyntaxHighlighter详解

2025/4/2 10:03:40 来源:https://blog.csdn.net/ckg3824278/article/details/143626008  浏览:    关键词:qt QSyntaxHighlighter详解
1、概述

QSyntaxHighlighter是Qt文本处理框架中的一个强大工具,它专门用于实现文本编辑器中的语法高亮功能。通过自定义高亮规则,QSyntaxHighlighter可以实现对代码编辑器、富文本编辑器中的关键字、注释等内容的高亮显示。这一功能对于提升代码的可读性和编辑效率具有重要意义。

2、重要方法
  • QSyntaxHighlighter(QObject *parent):通过父对象构造。
  • QSyntaxHighlighter(QTextDocument *parent):通过文本文档构造。
  • void setDocument(QTextDocument *doc):设置语法高亮器关联的文本文档。
  • QTextDocument *document()const:返回语法高亮器关联的文本文档
  • virtual void highlightBlock(const Qstring &text):纯虚函数,需要在子类中实现,用于高亮显示指定文本块。
     
//.h
class SyntaxHighlighter : public QSyntaxHighlighter
{Q_OBJECTpublic:SyntaxHighlighter(QTextDocument *parent = nullptr);protected:void highlightBlock(const QString &text) override;private:void setupHighlightingRules();struct HighlightingRule{QRegExp pattern;QTextCharFormat format;};QVector<HighlightingRule> highlightingRules;QTextCharFormat keywordFormat;QTextCharFormat commentFormat;
};//.cpp
SyntaxHighlighter::SyntaxHighlighter(QTextDocument *parent): QSyntaxHighlighter(parent)
{setupHighlightingRules();
}void SyntaxHighlighter::setupHighlightingRules()
{HighlightingRule rule;// 关键字高亮规则keywordFormat.setForeground(Qt::blue);keywordFormat.setFontWeight(QFont::Bold);QStringList keywordPatterns;keywordPatterns << "\\bint\\b" << "\\bfloat\\b" << "\\bdouble\\b" << "\\bchar\\b"<< "\\bvoid\\b" << "\\bif\\b" << "\\belse\\b" << "\\bfor\\b"<< "\\bwhile\\b" << "\\breturn\\b";foreach (const QString &pattern, keywordPatterns) {rule.pattern = QRegExp(pattern);rule.format = keywordFormat;highlightingRules.append(rule);}// 注释高亮规则commentFormat.setForeground(Qt::darkGray);commentFormat.setFontItalic(true);rule.pattern = QRegExp("//[^\n]*");rule.format = commentFormat;highlightingRules.append(rule);
}void SyntaxHighlighter::highlightBlock(const QString &text)
{foreach (const HighlightingRule &rule, highlightingRules) {QRegExp expression(rule.pattern);int index = expression.indexIn(text);while (index >= 0) {int length = expression.matchedLength();setFormat(index, length, rule.format);index = expression.indexIn(text, index + length);}}
}//main.cpp
int main(int argc, char *argv[])
{QApplication a(argc, argv);QTextEdit textEdit;textEdit.setPlainText("int main() { if (true) { return 0; } }"); // 设置示例文本// 创建并应用Highlighter实例SyntaxHighlighter *highlighter = new SyntaxHighlighter(textEdit.document());textEdit.show();return a.exec();
}

觉得有帮助的话,打赏一下呗。。

           

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词