In most code editors, the text highlight does not remove the syntax colors.
For example:
I would like to simulate this function in the code editor I'm making in QT; however, the text highlight turns all of the text into a single color:
vs
Would it be possible to retain the syntax highlighting during a text highlight?
FYI: I'm using a QPlainTextEdit
and QSyntaxHighlighter
to create the editor. I've tried changing the palette of the QPlainTextEdit
, but I cannot seem to find a way to disable the HighlightedText
effect.
EDIT: Here is a simplified version of the code I'm using to add some context:
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);
}
Good news! After revisiting this issue, I found the solution after playing around for a bit. Feel a little stupid not trying this sooner as it works perfectly.
On the QPlainTextEdit
(or whichever widget applicable to the scenario), you simply need to set the QPalette::HighlightedText
to QBrush(Qt::NoBrush)
.
For example, to replicate the transparent highlight from Sublime Text, you would simply do:
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);
Result: