文本选中区域的颜色可以用 QPalette 或者设置样式表,选中后默认文本是渲染为白色,可以设置 palette 的 brush 为 Qt::NoBrush 保持原本的文本颜色。

    //背景和选区颜色QPalette pt = palette();pt.setBrush(QPalette::Text, Qt::white);pt.setBrush(QPalette::Base, Qt::black);pt.setBrush(QPalette::Highlight, Qt::gray);pt.setBrush(QPalette::HighlightedText, Qt::NoBrush);setPalette(pt);//qss貌似没有NoBrush对应的设置//setStyleSheet("QTextEdit{color:white;background-color:black;"//              "selection-color:white;selection-background-color:gray;}");

关键字语法高亮借助 QSyntaxHighlighter 类,参考官方示例 syntaxhighlighter。

#pragma once
#include <QSyntaxHighlighter>
#include <QTextCharFormat>
#include <QTextDocument>
#include <QRegularExpression>class MyHighlighter : public QSyntaxHighlighter
{Q_OBJECT
public:explicit MyHighlighter(QTextDocument *parent = nullptr);protected:void highlightBlock(const QString &text) override;private:struct HighlightingRule{QRegularExpression pattern;QTextCharFormat format;};QVector<HighlightingRule> highlightingRules;
};MyHighlighter::MyHighlighter(QTextDocument *parent): QSyntaxHighlighter(parent)
{//关键字高亮HighlightingRule keys_rule;keys_rule.pattern.setPattern("(def|function|return)");keys_rule.format.setForeground(QColor(0, 0, 255));keys_rule.format.setFontWeight(QFont::Bold);highlightingRules.append(keys_rule);//双引号范围高亮HighlightingRule str_rule;str_rule.pattern.setPattern("\".*\"");str_rule.format.setForeground(QColor(200, 100, 0));str_rule.format.setFontWeight(QFont::Bold);highlightingRules.append(str_rule);
}void MyHighlighter::highlightBlock(const QString &text)
{//QRegularExpressionfor (const HighlightingRule &rule : qAsConst(highlightingRules)) {QRegularExpressionMatchIterator matchIterator = rule.pattern.globalMatch(text);while (matchIterator.hasNext()) {QRegularExpressionMatch match = matchIterator.next();setFormat(match.capturedStart(), match.capturedLength(), rule.format);}}//QRegExp/*for (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);}}*/
}
MyHighlighter *keys_lighter = new MyHighlighter(ui->textEdit->document());

当前所在行背景变色,参考官方示例 codeeditor。

    //当前行颜色设置 this派生自QTextEditconnect(this, &MyTextEdit::cursorPositionChanged, this, [this](){QList<QTextEdit::ExtraSelection> extra_selections;QTextEdit::ExtraSelection line;line.format.setBackground(QColor(50, 50, 50));line.format.setProperty(QTextFormat::FullWidthSelection, true);line.cursor = this->textCursor();line.cursor.clearSelection();extra_selections.append(line);this->setExtraSelections(extra_selections);});

通过代码选中指定的文本。

    //代码选中指定位置 this派生自QTextEditsetPlainText("def function(){\n    print(\"hello qt!\")\n}");QString key = "hello";/*QString text = this->toPlainText();int pos = text.indexOf(key);if (pos >= 0) {QTextCursor cursor = this->textCursor();cursor.setPosition(pos, QTextCursor::MoveAnchor); //移到key起始位置cursor.movePosition(QTextCursor::NoMove, QTextCursor::KeepAnchor, key.length());cursor.select(QTextCursor::WordUnderCursor);setTextCursor(cursor);}*/QTextCursor cursor = this->textCursor();QTextDocument *doc = this->document();//find有重载,可以指定查找开始的位置QTextCursor ret = doc->find(key, cursor, QTextDocument::FindWholeWords);if (!ret.isNull()) {setTextCursor(ret);}

本文测试代码:https://github.com/gongjianbo/MyTestCode/tree/master/Qt/TextEditHighlight

参考博客:https://blog.csdn.net/qq_42351063/article/details/115706359

QTextEdit的几种高亮设置(选中文本、关键字)相关推荐

  1. java鼠标进入高亮效果_鼠标选中文本划词高亮、再次选中划词取消高亮效果

    当我们需要鼠标选中文本后,文本高亮.当再次将选中的文本选中后,取消高亮效果时该如何实现呢? 一.介绍 window.getSelection 获取鼠标选中内容,主要是利用了window.getSele ...

  2. 【最全IDEA个性化教程】idea设置主题+恢复主题默认设置+设置选中代码颜色+关键字颜色+设置字体大小、样式、颜色+设置背景颜色、图片+设置导航栏背景颜色+设置控制台字体样式及背景+常用快捷键)

    目录 下载设置主题样式+恢复主题默认设置 1 个性化代码段 1.1设置颜色 设置光标颜色 自定义图片做背景 修改代码段的颜色和背景颜色 选中代码块颜色修改,修改括号颜色 1.2 设置字体大小.格式 1 ...

  3. android listview设置选中时的item的背景色

    今天实在不知道写些什么内容,所以自己在网上找了些资料,觉得还可以,所以还是写一下,觉得每天写些东西的习惯不能荒废. 默认情况下使用ListView背景色是黑色,选中item的高亮颜色是菊黄色,很多时候 ...

  4. UITableViewCell的高亮和选中以及自绘分割线

    UITableViewCell的高亮和选中以及自绘分割线 UITableView是一个比较复杂的控件,不过再负责也是由一些基础的UIView组成的,它继承自UIScrollView,并由很多重用的ce ...

  5. linux vi代码高亮,linux Vi编辑器代码高亮设置及永久显示行号的方法

    在linux中用vi编辑和修改文件配置中没有彩色显示文件的内容,特别一些关键字不能彩色显示,给我们配置服务过程中造成极大的不方便.[其实主要是vi本身不带颜色的,vim带颜色]下面给出一种解决的方法. ...

  6. 怎样用html设置文档格式,Dreamweaver使用CSS样式表设置网页文本格式

    Dreamweaver使用CSS样式表设置网页文本格式 互联网   发布时间:2008-10-17 19:35:50   作者:佚名   我要评论 本文章介绍如何在 Dreamweaver 中使用层叠 ...

  7. 用于设定表格样式的附加css,Dreamweaver使用CSS样式表设置网页文本格式

    核心提示:本文章介绍如何在 Dreamweaver 中使用层叠样式表 (CSS) 设置页面中的文本格式.您可以使用 CSS 以 HTML 无法提供的方式来设置文本格式和定位文本,从而能更加灵活自如地控 ...

  8. python 读取鼠标选中文本_经牌讲座|软件神器分享之全局鼠标手势工具软件WGestures...

    今天小编要给大家介绍一款软件,这款国产手势神器叫WGestures,这是一款非常好用的Windows系统全局鼠标手势工具软件,大小仅2.77M,下载下来后没有其他附带的流氓软件,支持Win7/10,免 ...

  9. html用于设置段落文本缩进,CDR中如何设置段落文本首行缩进

    原标题:CDR中如何设置段落文本首行缩进 本文详细介绍关于在里面段落文字如何快速排版的技巧,其中针对段落文本首行缩进为用户提供了两种简单的操作方法.教程很基础,也很实用,好了,下面我们一起看看. 使用 ...

最新文章

  1. xib 拖关联控件的时候报Could not insert new outlet connection错误
  2. boost::log模块实现多线程异步日志记录示例
  3. 错误管道反应:Paul Szymkowiak和上下文驱动的思想家如何交谈
  4. when is SAP UI5 url hash changed in browser
  5. toString()和String.valueOf()的区别(转)
  6. PAT乙级 1086 就不告诉你 (附测试点1,2排查及用例)
  7. 力扣326.3的幂 C/C++
  8. OAuth2.0_授权服务配置_三项内容_Spring Security OAuth2.0认证授权---springcloud工作笔记141
  9. zookeeper 3.5.6安装
  10. 备份软件选择---gengzy@dc
  11. String、StringBuffer、StringBuilder有什么区别
  12. CS224N笔记(十):问答系统
  13. 【常见c语言笔试题嵌入式软件开发1】
  14. gpgga格式读取MATLAB,GPS协议GGA、GLL、GSA、GSV、RMC、VTG解释
  15. C语言实现链栈的创建、入栈、出栈、取栈顶、遍历......等基本操作(小白版详解)
  16. java调试报告_java,生成测试报告.docx
  17. 南京大学计算机系2019复试离散题目-逻辑与推理
  18. win7服务器未能登录怎么解决,win7系统出现User Profile Service服务未能登录的解决方法...
  19. Android Jetpack架构篇:Room
  20. sd/mmc驱动框架-(三)mmc子系统的数据结构

热门文章

  1. 地铁逃生的服务器正在维护吗,地铁逃生误区
  2. redis实现消息队列的几种方式及其优劣
  3. 直播代码开发者别忘了,直播代码中有这些盈利手段
  4. Android中如何监听手机GPS打开状态
  5. 手机时间用长了会不会没信号服务器,手机卡能用多久?用久磨损了会影响手机信号么?...
  6. Python前景介绍
  7. 《element-plus》el-scrollbar 横向滚动条隐藏解决方案
  8. Flutter-适配相关
  9. 计算机错误id11,错误711,教您宽带连接错误代码:711怎么解决
  10. Ubuntu 图像格式png到jpg的转换指令