Я хочу, чтобы мой подкласс QLineEdit рисовал другой текст (на самом деле, HTML), чем реальный текст.
Более конкретно, когда курсор находится в конце строки, он должен рисовать так, как если бы (HTML)Текст будет: text() + "<font color='gray'>ThisIsExtraText</font>"
:
Как этого достичь?
Я думаю о переопределении краски ()метод, но мне не нужно менять какое-либо поведение рисования, просто оно должно рисовать другой текст.
Однако я хочу, чтобы во всех отношениях свойство text () виджета содержало реальноетекст, а не измененный текст.
Подробнее: поведение, которое я пытаюсь реализовать, аналогично тексту-заполнителю, но отображается, когда в виджете редактирования строки есть какой-то текст (в отличие от заполнителя), который отображается при отсутствии текста).
Несколько проблем, с которыми я столкнулся:
QLineEdit не принимает HTML.Я думал, что смогу визуализировать QLineEdit в два этапа:
void MyLineEdit::paintEvent(QPaintEvent *event)
{
if(cursorPosition() == text().length())
{
bool oldBlockSignals = blockSignals(true);
// save old state:
QString oldText = text();
QString oldStyleSheet = styleSheet();
bool oldReadOnly = isReadOnly();
// change state:
setText(oldText + "ThisIsExtraText");
setStyleSheet("color: gray");
setReadOnly(true);
// paint changed state:
QLineEdit::paintEvent(event);
// restore state:
setText(oldText);
setStyleSheet(oldStyleSheet);
setReadOnly(oldReadOnly);
blockSignals(oldBlockSignals);
}
QLineEdit::paintEvent(event);
}
, но paintEvent очистит фон.
Даже если я перестану менять цвет, текст будет отображаться скурсор в неправильном положении.