我有一个带有自定义模型和代理的 QTableView,如何在编辑后更改单元格的背景颜色?
我应该在代理的 setModelData() 中完成这个操作吗?
在模型的
这该怎么正确地做呢?
编辑: 这是我在自定义模型中的整个
抱歉,我仍然不清楚,我将从《快速GUI开发书籍》示例中粘贴完整代码: 我在这里发布了我的代码 http://pastebin.com/ShgRRMcY 如何更改代码以使单元格背景颜色在编辑后更改?
我应该在代理的 setModelData() 中完成这个操作吗?
index.model.setData(index, QVariant(True),Qt.UserRole)
并且在模型的 data()
中,它自己是如何调用的?
if role == Qt.BackgroundColorRole:
if index.model().data(index,Qt.UserRole).toBool():
return QVariant(QColor(Qt.darkBlue))
在模型的
setData()
中,我没有任何类似以下代码的内容:if role==Qt.UserRole:
....
这该怎么正确地做呢?
编辑: 这是我在自定义模型中的整个
setData()
方法。def setData(self, index, value, role=Qt.EditRole):
if index.isValid() and 0 <= index.row() < len(self.particles):
particle = self.particles[index.row()]
column = index.column()
if column == ID:
value,ok= value.toInt()
if ok:
particle.id =value
elif column == CYCLEIDANDNAME:
cycleId,cycleName= value.toString().split(' ')
particle.cycleId =cycleId
# also need to set cycleName
for name in self.cycleNames:
if name.endsWith(cycleName):
particle.cycleFrameNormalized=particle.cycleName = name
break
elif column == CYCLEFRAME:
value,ok= value.toInt()
if ok:
print 'set new val to :',value
particle.cycleFrame =value
# self.setData(index,QVariant(QColor(Qt.red)),Qt.BackgroundRole)
elif column == CLASSID:
value,ok= value.toInt()
if ok:
particle.classId =value
elif column == VARIATIONID:
value,ok= value.toInt()
if ok:
particle.variationId =value
self.emit(SIGNAL("dataChanged(QModelIndex,QModelIndex)"),
index, index)
return True
return False
抱歉,我仍然不清楚,我将从《快速GUI开发书籍》示例中粘贴完整代码: 我在这里发布了我的代码 http://pastebin.com/ShgRRMcY 如何更改代码以使单元格背景颜色在编辑后更改?
QAbstractTableModel
的自定义模型,并且我已经实现了自己的setData()
,但它只处理Qt.EditRole
。 - ShumanQt.EditRole
?请发布您的代码的可管理版本。 - user1006989setData
中调用setData
有点毫无意义。它会调用自身。您需要将该颜色存储在数据(particle
)中的某个位置,在data
方法中检查并返回BackgroundRole
。顺便说一句,您在setData
中没有以任何方式使用role
。 - Avaris