Как в QLineEdit выделить часть текста цветным box-ом?
Есть 2 QLineEdit. Пускай в одном вводим предложение "Кот съел колбасу", во втором "Кот колбасу не ел". В первом QLineEdit выделяется слово "Кот" и "колбасу" и во стором те же слова выделяются, разными цветами сответственно. Пусть слово "Кот" будет на желтом фоне в обоих QLineEdit а, "Колбаса" на зеленом фоне.
Вот собственно сам механизм интересует, как выделять разными боксами части текста в QlineEdit, QTextEdit и прочих текстовых блоках
Ответы (1 шт):
Автор решения: Sergey Tatarincev
→ Ссылка
на форму надо кинуть lineedit. код mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTextLayout>
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);
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->lineEdit->setText("hello wonderful world");
QList<QTextLayout::FormatRange> formats;
QTextCharFormat f;
f.setFontWeight(QFont::Bold);
f.setForeground(Qt::blue);
QTextLayout::FormatRange format_hello;
format_hello.start = 0;
format_hello.length = 5;
format_hello.format = f;
f.setFontItalic(true);
f.setBackground(Qt::darkYellow);
f.setForeground(Qt::white);
QTextLayout::FormatRange format_wonder;
format_wonder.start = 6;
format_wonder.length = 10;
format_wonder.format = f;
formats.append(format_hello);
formats.append(format_wonder);
setLineEditTextFormat(ui->lineEdit, formats);
}
MainWindow::~MainWindow()
{
delete ui;
}
