QTableView根据值更改行颜色

时间:2012-01-19 01:07:21

标签: c++ qt qtableview qabstracttablemodel

我有一个QTableView我使用自己的QAbstractTableModel子模型实现了。我希望能够在行中的某个字段具有特定值时将行颜色更改为红色。我看到了很多例子,答案是调用模型setData并使用Qt::BackgroundRole来更改背景颜色。由于我将AbstractTableModel重新实现了setDatadata,因此调用模型setData对背景颜色角色没有任何作用,因为我只处理角色为{{1的数据}}。

我想我的第一个问题是:是否有更简单的方法来改变整个角色的颜色?如果没有,我猜我必须在Qt::DisplayRolesetData中实现该部分以处理data,如果有人有关于如何做的示例,我不知道怎么做这真的会有很大的帮助...

2 个答案:

答案 0 :(得分:4)

这比我想象的要容易......在我的数据方法中,我添加了一个检查为

if (role == Qt::BackgroundColorRole) 

在那个if块中。我检查了价值比较,看看是否我必须改变颜色的行,如果是,我将返回:

return QVariant(QColor(Qt::red));

答案 1 :(得分:4)

更好的答案是使用delegate提供的view执行此任务,而不是触及model。为什么模型应该知道您希望视图的颜色是什么?如果您希望多个视图的行为不同,会发生什么? ETC。

您可以使用setColumnDelegatesetRowDelegate或其他一些机制。看看这些功能,以获得完整的答案。