gpt4 book ai didi

qt - QSyntaxHighlighter-文本选择覆盖样式

转载 作者:行者123 更新时间:2023-12-03 11:59:36 24 4
gpt4 key购买 nike

我正在使用QPlainTextEditQSyntaxHighlighter创建自定义代码编辑器,但遇到了故障。我想保留语法高亮显示,即使在选择中也是如此。但是,所选内容的颜色(环境颜色)会覆盖QSyntaxHighlighter和html标签突出显示的文本的颜色。 保留其他属性,例如字体系列。

示例:

无选择:选择:
Unselected Selected
(我希望 Hello 为绿色,而World!为黑色)

我还尝试将样式表设置为:

QPlainTextEdit {
selection-color: rgba(0, 0, 0, 0);
selection-background-color: lightblue;
}

结果:

enter image description here
背景颜色覆盖了文本,因此,带有 alpha = 0的文本颜色不可见。我这样做是为了排除语法颜色在 selection-color下仍然存在的想法。实际上,它已被 selection-background-color覆盖。
编辑:不,如果我也将 selection-background-color设置为 rgba(0, 0, 0, 0),则没有选择,并且该选择中也没有文本。我所看到的只是背景。

以下代码段的方法使整个光标行都突出显示,这似乎是可行的方法,但是我基本上最终会重新实现所有选择机制...
QList<QTextEdit::ExtraSelection> extraSelections;
QTextCursor cursor = textCursor();

QTextEdit::ExtraSelection selection;
selection.format.setBackground(lineHighlightColor_);
selection.format.setProperty(QTextFormat::FullWidthSelection, true);
selection.cursor = cursor;
selection.cursor.clearSelection();
extraSelections.append(selection);
setExtraSelections(extraSelections);

有没有更简单的解决方案?

最佳答案

问题出在这里:

https://github.com/qt/qtbase/blob/e03b64c5b1eeebfbbb94d67eb9a9c1d35eaba0bb/src/widgets/widgets/qplaintextedit.cpp#L1939-L1945

QPlainTextEdit使用上下文调色板代替当前选择格式。

您可以从QPlainTextEdit创建一个类继承,并覆盖paintEvent

签名:

void paintEvent(QPaintEvent *);

从github中的新类paintEvent函数中复制函数的主体:

https://github.com/qt/qtbase/blob/e03b64c5b1eeebfbbb94d67eb9a9c1d35eaba0bb/src/widgets/widgets/qplaintextedit.cpp#L1883-L2013

在paintEvent之前在您的cpp文件中添加此函数(PlainTextEdit paintEvent需要它):

https://github.com/qt/qtbase/blob/e03b64c5b1eeebfbbb94d67eb9a9c1d35eaba0bb/src/widgets/widgets/qplaintextedit.cpp#L1861-L1876


#include <QPainter>
#include <QTextBlock>
#include <QScrollBar>

并替换每次出现的
o.format = range.format;

蒙山
o.format = range.cursor.blockCharFormat();
o.format.setBackground(QColor(your selection color with alpha));

使用您的自定义PlainTextEdit检查链接到当前字符的格式,而不是您的PlainTextEdit调色板

(提防(L)GPL许可证,我只是提供一个开放源解决方法)

关于qt - QSyntaxHighlighter-文本选择覆盖样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28257022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com