如何在文本突出显示期间保留语法突出显示

时间:2018-02-13 00:07:44

标签: c++ qt qplaintextedit

在大多数代码编辑器中,文本突出显示不会删除语法颜色。

例如:

  • Visual Studio

example Visual Studio

  • Sublime Text

example Sublime Text

我想在我在QT中制作的代码编辑器中模拟这个功能;但是,文本高亮显示将所有文本转换为单一颜色:

dsd vs dsad

是否可以在文本突出显示期间保留语法高亮?

仅供参考:我使用QPlainTextEditQSyntaxHighlighter来创建编辑器。我尝试更改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);
}

1 个答案:

答案 0 :(得分:0)

好消息!重新审视此问题后,我反复研究了一下,找到了解决方案。感觉有些愚蠢,因为它可以很好地工作,所以没有尽早尝试。

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);

结果:

i did the thing. hurrah! ~