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 标志。也许你可以在项目的委托中的某个地方这样做。
我正在尝试将我在 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 标志。也许你可以在项目的委托中的某个地方这样做。