QTextEdit的几种高亮设置(选中文本、关键字)
文本选中区域的颜色可以用 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的几种高亮设置(选中文本、关键字)相关推荐
- java鼠标进入高亮效果_鼠标选中文本划词高亮、再次选中划词取消高亮效果
当我们需要鼠标选中文本后,文本高亮.当再次将选中的文本选中后,取消高亮效果时该如何实现呢? 一.介绍 window.getSelection 获取鼠标选中内容,主要是利用了window.getSele ...
- 【最全IDEA个性化教程】idea设置主题+恢复主题默认设置+设置选中代码颜色+关键字颜色+设置字体大小、样式、颜色+设置背景颜色、图片+设置导航栏背景颜色+设置控制台字体样式及背景+常用快捷键)
目录 下载设置主题样式+恢复主题默认设置 1 个性化代码段 1.1设置颜色 设置光标颜色 自定义图片做背景 修改代码段的颜色和背景颜色 选中代码块颜色修改,修改括号颜色 1.2 设置字体大小.格式 1 ...
- android listview设置选中时的item的背景色
今天实在不知道写些什么内容,所以自己在网上找了些资料,觉得还可以,所以还是写一下,觉得每天写些东西的习惯不能荒废. 默认情况下使用ListView背景色是黑色,选中item的高亮颜色是菊黄色,很多时候 ...
- UITableViewCell的高亮和选中以及自绘分割线
UITableViewCell的高亮和选中以及自绘分割线 UITableView是一个比较复杂的控件,不过再负责也是由一些基础的UIView组成的,它继承自UIScrollView,并由很多重用的ce ...
- linux vi代码高亮,linux Vi编辑器代码高亮设置及永久显示行号的方法
在linux中用vi编辑和修改文件配置中没有彩色显示文件的内容,特别一些关键字不能彩色显示,给我们配置服务过程中造成极大的不方便.[其实主要是vi本身不带颜色的,vim带颜色]下面给出一种解决的方法. ...
- 怎样用html设置文档格式,Dreamweaver使用CSS样式表设置网页文本格式
Dreamweaver使用CSS样式表设置网页文本格式 互联网 发布时间:2008-10-17 19:35:50 作者:佚名 我要评论 本文章介绍如何在 Dreamweaver 中使用层叠 ...
- 用于设定表格样式的附加css,Dreamweaver使用CSS样式表设置网页文本格式
核心提示:本文章介绍如何在 Dreamweaver 中使用层叠样式表 (CSS) 设置页面中的文本格式.您可以使用 CSS 以 HTML 无法提供的方式来设置文本格式和定位文本,从而能更加灵活自如地控 ...
- python 读取鼠标选中文本_经牌讲座|软件神器分享之全局鼠标手势工具软件WGestures...
今天小编要给大家介绍一款软件,这款国产手势神器叫WGestures,这是一款非常好用的Windows系统全局鼠标手势工具软件,大小仅2.77M,下载下来后没有其他附带的流氓软件,支持Win7/10,免 ...
- html用于设置段落文本缩进,CDR中如何设置段落文本首行缩进
原标题:CDR中如何设置段落文本首行缩进 本文详细介绍关于在里面段落文字如何快速排版的技巧,其中针对段落文本首行缩进为用户提供了两种简单的操作方法.教程很基础,也很实用,好了,下面我们一起看看. 使用 ...
最新文章
- xib 拖关联控件的时候报Could not insert new outlet connection错误
- boost::log模块实现多线程异步日志记录示例
- 错误管道反应:Paul Szymkowiak和上下文驱动的思想家如何交谈
- when is SAP UI5 url hash changed in browser
- toString()和String.valueOf()的区别(转)
- PAT乙级 1086 就不告诉你 (附测试点1,2排查及用例)
- 力扣326.3的幂 C/C++
- OAuth2.0_授权服务配置_三项内容_Spring Security OAuth2.0认证授权---springcloud工作笔记141
- zookeeper 3.5.6安装
- 备份软件选择---gengzy@dc
- String、StringBuffer、StringBuilder有什么区别
- CS224N笔记(十):问答系统
- 【常见c语言笔试题嵌入式软件开发1】
- gpgga格式读取MATLAB,GPS协议GGA、GLL、GSA、GSV、RMC、VTG解释
- C语言实现链栈的创建、入栈、出栈、取栈顶、遍历......等基本操作(小白版详解)
- java调试报告_java,生成测试报告.docx
- 南京大学计算机系2019复试离散题目-逻辑与推理
- win7服务器未能登录怎么解决,win7系统出现User Profile Service服务未能登录的解决方法...
- Android Jetpack架构篇:Room
- sd/mmc驱动框架-(三)mmc子系统的数据结构