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

更新时间:2023-07-25 20:46:27 阅读: 评论:0

QTextEdit的⼏种⾼亮设置(选中⽂本、关键字)
⽂本选中区域的颜⾊可以⽤ QPalette 或者设置样式表,选中后默认⽂本是渲染为⽩⾊,可以设置 palette 的 brush 为 Qt::NoBrush 保持原本的⽂本颜⾊。
//背景和选区颜⾊
QPalette pt = palette();
pt.tBrush(QPalette::Text, Qt::white);
pt.tBrush(QPalette::Ba, Qt::black);
pt.tBrush(QPalette::Highlight, Qt::gray);
pt.tBrush(QPalette::HighlightedText, Qt::NoBrush);
tPalette(pt);
//qss貌似没有NoBrush对应的设置
//tStyleSheet("QTextEdit{color:white;background-color:black;"
//              "lection-color:white;lection-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.tPattern("(def|function|return)");
keys_rule.format.tForeground(QColor(0, 0, 255));
keys_rule.format.tFontWeight(QFont::Bold);
highlightingRules.append(keys_rule);
//双引号范围⾼亮
HighlightingRule str_rule;
str_rule.pattern.tPattern("\".*\"");
str_rule.format.tForeground(QColor(200, 100, 0));
晾晒str_rule.format.tFontWeight(QFont::Bold);
highlightingRules.append(str_rule);
}
void MyHighlighter::highlightBlock(const QString &text)
卧室英文
{
//QRegularExpression
for (const HighlightingRule &rule : qAsConst(highlightingRules)) {
QRegularExpressionMatchIterator matchIterator = rule.pattern.globalMatch(text);        while (matchIterator.hasNext()) {
QRegularExpressionMatch match = ();
tFormat(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();
tFormat(index, length, rule.format);
index = expression.indexIn(text, index + length);
}
}*/
}
MyHighlighter *keys_lighter = new MyHighlighter(ui->textEdit->document());
当前所在⾏背景变⾊,参考官⽅⽰例 codeeditor。
//当前⾏颜⾊设置 this派⽣⾃QTextEdit
connect(this, &MyTextEdit::cursorPositionChanged, this, [this](){
QList<QTextEdit::ExtraSelection> extra_lections;
QTextEdit::ExtraSelection line;
line.format.tBackground(QColor(50, 50, 50));
line.format.tProperty(QTextFormat::FullWidthSelection, true);
line.cursor = this->textCursor();
line.cursor.clearSelection();
extra_lections.append(line);
this->tExtraSelections(extra_lections);
});
月什么星稀通过代码选中指定的⽂本。
//代码选中指定位置 this派⽣⾃QTextEdit
tPlainText("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.tPosition(pos, QTextCursor::MoveAnchor); //移到key起始位置
番茄炒土豆
tTextCursor(cursor);
}*/
QTextCursor cursor = this->textCursor();
QTextDocument *doc = this->document();
//find有重载,可以指定查找开始的位置
QTextCursor ret = doc->find(key, cursor, QTextDocument::FindWholeWords);
if (!ret.isNull()) {
tTextCursor(ret);
}

本文发布于:2023-07-25 20:46:27,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1096487.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:选中   指定   位置
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图