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
相关产品推荐
相关产品推荐

