我有一个 customQTableView
和一个 custom QAbstractTableModel
。该视图仅允许单个选择。我正在尝试在某些条件下自定义所选单元格的背景颜色,但没有成功。我希望通过将data
模型的selectionChanged
方法与视图的方法相结合来做到这一点。例如,假设我想在所选单元格与给定行匹配时更改它的颜色。我的selectionChanged
方法代码是:
def selectionChanged(self, selected, deselected):
#QtGui.QTableView.selectionChanged(self, selected, deselected)
# Get the selected indexes from the QItemSelection object
selection = selected.indexes()
# Let the model track the selected cell
self.tmodel.selected_index = selection[0]
# Desperately try to make it work
self.tmodel.dataChanged.emit(selection[0], selection[0])
self.viewport().update()
我对该方法的简化代码data
是:
def data(self, index, role=QtCore.Qt.DisplayRole):
if not index.isValid():
return None
# Some code here dealing with several roles
if role == QtCore.Qt.DisplayRole:
...
elif role == QtCore.Qt.BackgroundRole:
if ((index == self.selected_index) and (index.row() == 3)):
print '++++ displaying selected'
return QtGui.QColor(QtCore.Qt.yellow)
else:
return QtGui.QColor(QtCore.Qt.green)
else:
return None
未选中的单元格具有预期的绿色背景。奇怪的是,当我在匹配行中选择一个单元格时,++++ displaying selected
会打印消息,但所选单元格具有系统默认背景而不是黄色背景。我必须在这里遗漏一些重要/明显的东西,但我不知道它是什么。
更新
我知道我可以使用自定义委托并实现其paint
方法来实现我的目标,但我想知道为什么上面的代码会失败。