如何让QTableView选择不影响DecorationRole设置的QIcons/QPixmaps?
How to make QTableView selection not affect QIcons/QPixmaps set by DecorationRole?
我正在使用 PyQt6,并且有一个自定义 QTableView 和一个自定义 QTableModel。该模型的数据方法如下所示:
def data(self, index: QModelIndex, role: Qt.ItemDataRole = Qt.ItemDataRole.DisplayRole):
if role == Qt.ItemDataRole.DecorationRole:
if not index.column():
# print(index.row())
artwork_pixmap = self._tracks[index.row()].artwork_pixmap
artwork_pixmap = artwork_pixmap if artwork_pixmap else QPixmap(f"icons/album.png")
icon = QIcon(artwork_pixmap)
return icon
_tracks 是一个包含自定义对象的列表,这些对象具有我想要显示的像素图,如果没有,那么我只显示图像 album.png 中的默认像素图。一切正常,QIcons 显示在第一列中。但是一旦我 select 该行它也会使 QIcon 变蓝,这不是我想要的。无论我的视图样式表中设置的 selection 颜色如何,它都会使它偏蓝。即使我将它的焦点策略设置为 NoFocus,它也不会 select 单击任何内容,但它仍然会使我单击的行中的 QIcon 变成蓝色。有什么办法可以防止这种情况吗?
这是例子,第一行是我点击的,背景颜色没有因为NoFocus而改变,但是QIcon与正常颜色相比变得偏蓝。
QIcon 自动为 Disabled
和 Selected
icon modes 创建给定像素图的替代版本,第一个是像素图的灰色版本,第二个基于调色板 Highlight
角色。
要覆盖这些图标,只需使用 addPixmap()
:
显式设置所需状态的像素图
artwork_pixmap = self._tracks[index.row()].artwork_pixmap
if not artwork_pixmap:
artwork_pixmap = QPixmap("icons/album.png")
icon = QIcon(artwork_pixmap)
icon.addPixmap(artwork_pixmap, QtGui.QIcon.Selected)
return icon
我正在使用 PyQt6,并且有一个自定义 QTableView 和一个自定义 QTableModel。该模型的数据方法如下所示:
def data(self, index: QModelIndex, role: Qt.ItemDataRole = Qt.ItemDataRole.DisplayRole):
if role == Qt.ItemDataRole.DecorationRole:
if not index.column():
# print(index.row())
artwork_pixmap = self._tracks[index.row()].artwork_pixmap
artwork_pixmap = artwork_pixmap if artwork_pixmap else QPixmap(f"icons/album.png")
icon = QIcon(artwork_pixmap)
return icon
_tracks 是一个包含自定义对象的列表,这些对象具有我想要显示的像素图,如果没有,那么我只显示图像 album.png 中的默认像素图。一切正常,QIcons 显示在第一列中。但是一旦我 select 该行它也会使 QIcon 变蓝,这不是我想要的。无论我的视图样式表中设置的 selection 颜色如何,它都会使它偏蓝。即使我将它的焦点策略设置为 NoFocus,它也不会 select 单击任何内容,但它仍然会使我单击的行中的 QIcon 变成蓝色。有什么办法可以防止这种情况吗?
这是例子,第一行是我点击的,背景颜色没有因为NoFocus而改变,但是QIcon与正常颜色相比变得偏蓝。
QIcon 自动为 Disabled
和 Selected
icon modes 创建给定像素图的替代版本,第一个是像素图的灰色版本,第二个基于调色板 Highlight
角色。
要覆盖这些图标,只需使用 addPixmap()
:
artwork_pixmap = self._tracks[index.row()].artwork_pixmap
if not artwork_pixmap:
artwork_pixmap = QPixmap("icons/album.png")
icon = QIcon(artwork_pixmap)
icon.addPixmap(artwork_pixmap, QtGui.QIcon.Selected)
return icon