我有一个QTableView
我使用自己的QAbstractTableModel
子模型实现了。我希望能够在行中的某个字段具有特定值时将行颜色更改为红色。我看到了很多例子,答案是调用模型setData
并使用Qt::BackgroundRole
来更改背景颜色。由于我将AbstractTableModel
重新实现了setData
和data
,因此调用模型setData
对背景颜色角色没有任何作用,因为我只处理角色为{{1的数据}}。
我想我的第一个问题是:是否有更简单的方法来改变整个角色的颜色?如果没有,我猜我必须在Qt::DisplayRole
和setData
中实现该部分以处理data
,如果有人有关于如何做的示例,我不知道怎么做这真的会有很大的帮助...
答案 0 :(得分:4)
这比我想象的要容易......在我的数据方法中,我添加了一个检查为
if (role == Qt::BackgroundColorRole)
在那个if块中。我检查了价值比较,看看是否我必须改变颜色的行,如果是,我将返回:
return QVariant(QColor(Qt::red));
答案 1 :(得分:4)
更好的答案是使用delegate
提供的view
执行此任务,而不是触及model
。为什么模型应该知道您希望视图的颜色是什么?如果您希望多个视图的行为不同,会发生什么? ETC。
您可以使用setColumnDelegate
,setRowDelegate
或其他一些机制。看看这些功能,以获得完整的答案。