如何在文本突出显示期间保留语法突出显示
Posted
技术标签:
【中文标题】如何在文本突出显示期间保留语法突出显示【英文标题】:How to retain Syntax Highlighting during text highlight 【发布时间】:2018-02-13 00:07:44 【问题描述】:在大多数代码编辑器中,文本突出显示不会删除语法颜色。
例如:
Visual Studio 崇高的文字我想在我用 QT 制作的代码编辑器中模拟这个功能;但是,文本突出显示会将所有文本变成单一颜色:
与
是否可以在文本突出显示期间保留语法突出显示?
仅供参考:我使用QPlainTextEdit
和QSyntaxHighlighter
来创建编辑器。我尝试更改QPlainTextEdit
的调色板,但我似乎找不到禁用HighlightedText
效果的方法。
编辑: 这是我用来添加一些上下文的代码的简化版本:
void MyHighlighter::highlightBlock(const QString& text)
// Sets characters 0 ~ 10 to be colored rgb(100, 200, 100)
QTextCharFormat temp;
temp.setForeground(QColor(100, 200, 100));
setFormat(0, 10, temp);
【问题讨论】:
显示更多代码,如何定义样式。我相信您可以在选择文本时定义不同样式的文本,而您只是错过了。 @MarekR 我只是在扩展的QSyntaxHighlighter::highlightBlock
中使用setFormat
函数。我在原始帖子中添加了一个小示例。我试图寻找一些东西来修改QTextCharFormat
以使突出显示颜色相同,但没有运气。 (另外,感谢您的帖子编辑。不知道您可以嵌入这样的图像>。
我检查了 Qt Creator 的工作原理。可悲的是,它有这个问题,所选文本没有着色。所以可能很难做你想做的事。
@MarekR Ack,我明白了。代码中是否有特定位置我应该查找文本重新着色的位置?也许我可以从那里弄清楚。
【参考方案1】:
好消息!重新审视这个问题后,我在玩了一会后找到了解决方案。感觉有点愚蠢,因为它工作得很好,所以不早点尝试。
在QPlainTextEdit
(或适用于该场景的任何小部件)上,您只需将QPalette::HighlightedText
设置为QBrush(Qt::NoBrush)
。
例如,要从 Sublime Text 复制透明高亮,您只需这样做:
auto palette = textEditWidget->palette();
// provide highlight color with low alpha
palette.setBrush(QPalette::Highlight, QColor(255, 255, 255, 30));
// set highlight text brush to "No Brush"
palette.setBrush(QPalette::HighlightedText, QBrush(Qt::NoBrush));
// apply to widget
textEditWidget->setPalette(palette);
结果:
【讨论】:
以上是关于如何在文本突出显示期间保留语法突出显示的主要内容,如果未能解决你的问题,请参考以下文章
即使保留语法突出显示,将代码从 Visual Studio Code 复制到 OneNote 也会丢失选项卡缩进