When QLineEdit is used in KHTML widget as KLineEdit, setting CSS style "border-style" will make text caret cursor invisible; it is rendered with a background color. Currently, text caret cursor is rendered with temporary setting QPainter->setCompositionMode to QPainter::RasterOp_NotDestination; this seems to be correct in native QLineEdit decorations, but this seems to make text caret disappear in KLineEdit. To fix this, use QPainter::RasterOp_SourceOrNotDestination as a temporary setCompositionMode to render text caret cursor. diff -up ./src/gui/text/qtextlayout.cpp.caret ./src/gui/text/qtextlayout.cpp --- ./src/gui/text/qtextlayout.cpp.caret 2018-06-15 16:29:31.000000000 +0900 +++ ./src/gui/text/qtextlayout.cpp 2020-07-18 11:40:06.319209981 +0900 @@ -1332,12 +1332,19 @@ void QTextLayout::drawCursor(QPainter *p if (toggleAntialiasing) p->setRenderHint(QPainter::Antialiasing); QPainter::CompositionMode origCompositionMode = p->compositionMode(); - if (p->paintEngine()->hasFeature(QPaintEngine::RasterOpModes)) - p->setCompositionMode(QPainter::RasterOp_NotDestination); + + if (p->paintEngine()->hasFeature(QPaintEngine::RasterOpModes)) { + // orig; seems correct, but KHTML LineEdit text cursor caret becomes + // white and invisible when "border-style:" is set + //p->setCompositionMode(QPainter::RasterOp_NotDestination); + + p->setCompositionMode(QPainter::RasterOp_SourceOrNotDestination); + } p->fillRect(QRectF(x, y, qreal(width), (base + descent).toReal()), p->pen().brush()); p->setCompositionMode(origCompositionMode); if (toggleAntialiasing) p->setRenderHint(QPainter::Antialiasing, false); + if (d->layoutData->hasBidi) { const int arrow_extent = 4; int sign = rightToLeft ? -1 : 1;