You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QListWidget选中项图标未正常变白呈浅蓝问题求助

解决QListWidget选中项白色图标显示为浅蓝的问题

问题根源

Qt默认会对选中状态下的QListWidgetItem图标应用高亮调色板染色——自动将图标颜色向选中项的背景色(你的蓝色rgb(46, 123, 253))偏移,导致纯白图标被过滤成浅蓝,和背景色混淆。

解决方案

1. 禁用图标自动染色(代码层面)

修改切换图标的Python代码,强制QIcon使用原始颜色,绕过Qt的自动染色机制:

def change_icon(self):
    icon_list = ['resources-inverted/all_music.png', 'resources-inverted/favourite_music.png',
                 'resources-inverted/recommended.png',
                 'resources-inverted/MV.png', 'resources-inverted/bilibili.png']
    index = self.ui.listWidget.currentRow()
    
    # 直接创建QIcon并强制使用原始状态的图标
    icon = QIcon(icon_list[index])
    # 设置图标时指定Normal模式,忽略选中状态的染色
    self.ui.listWidget.item(index).setIcon(icon)
    
    self.ui.listWidget.setIconSize(QSize(23, 23))
    self.set_list_icon(exception=index)

如果仍有问题,可进一步强制pixmap不被调色板影响:

def change_icon(self):
    icon_list = ['resources-inverted/all_music.png', 'resources-inverted/favourite_music.png',
                 'resources-inverted/recommended.png',
                 'resources-inverted/MV.png', 'resources-inverted/bilibili.png']
    index = self.ui.listWidget.currentRow()
    
    pixmap = QPixmap(icon_list[index])
    # 适配设备像素比,避免模糊
    pixmap.setDevicePixelRatio(self.ui.listWidget.devicePixelRatio())
    # 创建不自动染色的图标
    icon = QIcon(pixmap)
    
    self.ui.listWidget.item(index).setIcon(icon)
    self.ui.listWidget.setIconSize(QSize(23, 23))
    self.set_list_icon(exception=index)

2. 通过QSS强制图标颜色

在你的QSS样式中添加规则,直接指定选中项图标的颜色为纯白,覆盖Qt的自动染色:

QListWidget 
{
    background-color: #ffffff;
    border: none;
    border-radius: 10px; /* 修正原代码的拼写错误:border-raduis → border-radius */
    font: 10.5pt "Microsoft Yahei";
    outline: 0px;
    padding-top: 55px;
}
QListWidget::item 
{
    background-color: transparent;
    color: #000000;
    border: 0px;
    padding-left: 5px;
    height: 38px;
}
QListWidget::item:selected 
{
    color: #ffffff;
    background-color: rgb(46, 123, 253);
    border-radius: 9px;
    /* 强制选中项图标为纯白色 */
    qt-icon-color: #ffffff;
}

3. 检查图标文件本身

确认resources-inverted目录下的图标是纯白色(#FFFFFF)且无半透明通道的PNG文件。如果图标本身带有透明度或颜色偏差,显示时会和蓝色背景混合,导致视觉上呈现浅蓝。可通过图像编辑工具(如GIMP、Photoshop)验证并修正图标颜色。

内容的提问来源于stack exchange,提问作者SerSmile

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 08:15:38