QListView 突出显示颜色未应用于项目图标

QListView highlight color not applied to item icon

我正在尝试将我在 QListView 上设置的悬停突出显示颜色应用于项目的图标。现在它只适用于周围环境(图像有一个 alpha 通道,在白色背景下为 0):

可以清楚的看到3D模型本身并没有受到高亮颜色的影响。当我 select 图像获得 select 离子颜色的项目时:

并且在 selected 之后它也会受到高亮颜色的影响(即这就是我想通过将鼠标悬停在项目上产生的结果):

我使用的样式表如下:

QListView::item {
    color: #000000;
    background-color:transparent;
}

QListView::item:hover:!pressed {
    padding: -1px;
    border: 1px solid #75c1ff;
    border-radius: 2px;
    background-color: #c6e5ff;
}

QListView::item:selected {
    padding: -1px;
    border: 1px solid #5eb6ff;
    border-radius: 2px;
    background-color: #9ed2ff;
}

这就是我在列表视图的项目模型的 data 方法中返回图像的方式:

return QIcon(QPixmap::fromImage(m_renderedObjectsModels.value(objectModel.path())));

我尝试为不同的状态添加多个 QPixmap(如建议的 here),但 none 仅适用于悬停(至少我没有找到说明我可以为此添加一个像素图,这样它就可以工作了)。

我不确定您使用的是哪个 Qt 版本,所以让我们考虑一些 Qt5.15。当您使用样式表时,可能真正的绘图发生在 QCommonStyle::drawControl() 和 CE_ItemViewItem 类型中。如果是这样,那么事情就在绘图中:

  • 背景
  • 复选标记
  • 图标
  • 文字
  • 焦点矩形

所以我认为 #2 和 #3 图像是这样绘制的,因为在图标后面绘制了“焦点矩形”。而在 #1 的情况下,这不会发生,当只绘制背景并在其上绘制图标但没有“焦点矩形”时。

要解决这个问题,您可以尝试重新实现项目的样式和绘图。或者更脏的方法可能是设置 opt 参数的 QStyle::State_HasFocus 标志。也许你可以在项目的委托中的某个地方这样做。