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?
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.
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With