5

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

例如:

  • 视觉工作室

示例 Visual Studio

  • 崇高的文本

崇高文本示例

我想在我用 QT 制作的代码编辑器中模拟这个功能;但是,文本突出显示会将所有文本变成单一颜色:

dsd对比 悲伤

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


仅供参考:我正在使用QPlainTextEditandQSyntaxHighlighter来创建编辑器。我尝试更改 的调色板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);
}
4

1 回答 1

6

好消息!重新审视这个问题后,我在玩了一会后找到了解决方案。感觉有点愚蠢,因为它工作得很好,所以不早点尝试。

QPlainTextEdit(或适用于该场景的任何小部件)上,您只需将 设置QPalette::HighlightedTextQBrush(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);

结果:

我做了这件事。 欢呼! ~

于 2019-01-07T21:57:35.017 回答