Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I change color of part of the text in QLineEdit?

Tags:

I want to add some syntax highlighting to text being written in QLineEdit, but it does not support rich text formatting, I can not change QlineEdit to something else, so I should find how to set color of text in this widget.

Is there a way to do this?

like image 269
Vasaka Avatar asked Jan 19 '13 18:01

Vasaka


People also ask

How do I change the text color in QLineEdit?

In QC Designer, click on the QLineEdit box and in the properties, enable "autoFillBackground". Next, select the Palette property and in the pop up window, change the Text color to white.


1 Answers

Just found a neat trick for that.

static void setLineEditTextFormat(QLineEdit* lineEdit, const QList<QTextLayout::FormatRange>& formats) {     if(!lineEdit)         return;      QList<QInputMethodEvent::Attribute> attributes;     foreach(const QTextLayout::FormatRange& fr, formats)     {         QInputMethodEvent::AttributeType type = QInputMethodEvent::TextFormat;         int start = fr.start - lineEdit->cursorPosition();         int length = fr.length;         QVariant value = fr.format;         attributes.append(QInputMethodEvent::Attribute(type, start, length, value));     }     QInputMethodEvent event(QString(), attributes);     QCoreApplication::sendEvent(lineEdit, &event); }  static void clearLineEditTextFormat(QLineEdit* lineEdit) {     setLineEditTextFormat(lineEdit, QList<QTextLayout::FormatRange>()); }  // Usage example: QLineEdit* lineEdit = new QLineEdit; lineEdit->setText(tr("Task Tracker - Entry"));  QList<QTextLayout::FormatRange> formats;  QTextCharFormat f;  f.setFontWeight(QFont::Bold); QTextLayout::FormatRange fr_task; fr_task.start = 0; fr_task.length = 4; fr_task.format = f;  f.setFontItalic(true); f.setBackground(Qt::darkYellow); f.setForeground(Qt::white); QTextLayout::FormatRange fr_tracker; fr_tracker.start = 5; fr_tracker.length = 7; fr_tracker.format = f;  formats.append(fr_task); formats.append(fr_tracker);  setLineEditTextFormat(lineEdit, formats); 
like image 131
Vasaka Avatar answered Oct 26 '22 22:10

Vasaka