From 5dfec88838f24fbd41f90075357e1f3459f233d6 Mon Sep 17 00:00:00 2001 From: Wladimir Leuschner Date: Mon, 15 Jan 2024 16:47:05 +0100 Subject: [PATCH] QWindows11Style: Fix transparency for overlapping ItemView editing Fixes: QTBUG-120254 Change-Id: Iabaee612f5a0613cbbcafe566b4a14d01cefa47c Reviewed-by: Oliver Wolff (cherry picked from commit 1a559261966f334e40ccd6d081302974e5b2b059) Reviewed-by: Qt Cherry-pick Bot --- src/plugins/styles/modernwindows/qwindows11style.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/plugins/styles/modernwindows/qwindows11style.cpp b/src/plugins/styles/modernwindows/qwindows11style.cpp index 09c612268b6..b3ae8764c86 100644 --- a/src/plugins/styles/modernwindows/qwindows11style.cpp +++ b/src/plugins/styles/modernwindows/qwindows11style.cpp @@ -1520,6 +1520,7 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op } case QStyle::CE_ItemViewItem: { if (const QStyleOptionViewItem *vopt = qstyleoption_cast(option)) { + const QAbstractItemView *view = qobject_cast(widget); QRect checkRect = proxy()->subElementRect(SE_ItemViewItemCheckIndicator, vopt, widget); QRect iconRect = proxy()->subElementRect(SE_ItemViewItemDecoration, vopt, widget); QRect textRect = proxy()->subElementRect(SE_ItemViewItemText, vopt, widget); @@ -1542,6 +1543,14 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op if ((vopt->state & State_Selected || vopt->state & State_MouseOver) && !(isTreeView && vopt->state & State_MouseOver) && vopt->showDecorationSelected) { painter->setBrush(WINUI3Colors[colorSchemeIndex][subtleHighlightColor]); + QWidget *editorWidget = view->indexWidget(view->currentIndex()); + if (editorWidget) { + QPalette pal = editorWidget->palette(); + QColor editorBgColor = vopt->backgroundBrush == Qt::NoBrush ? vopt->palette.color(widget->backgroundRole()) : vopt->backgroundBrush.color(); + editorBgColor.setAlpha(255); + pal.setColor(editorWidget->backgroundRole(),editorBgColor); + editorWidget->setPalette(pal); + } } else { painter->setBrush(vopt->backgroundBrush); } @@ -1587,7 +1596,6 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op vopt->icon.paint(painter, iconRect, vopt->decorationAlignment, mode, state); painter->setPen(QPen(option->palette.buttonText().color())); - const QAbstractItemView* view = qobject_cast(widget); if (!view->isPersistentEditorOpen(vopt->index)) d->viewItemDrawText(painter, vopt, textRect); if (vopt->state & State_Selected && (vopt->viewItemPosition == QStyleOptionViewItem::Beginning || vopt->viewItemPosition == QStyleOptionViewItem::OnlyOne || vopt->viewItemPosition == QStyleOptionViewItem::Invalid)) {