QTableView 根据值更改行颜色
Posted
技术标签:
【中文标题】QTableView 根据值更改行颜色【英文标题】:QTableView change row color based on a value 【发布时间】:2012-01-19 01:07:20 【问题描述】:我有一个QTableView
,我用我自己的模型从QAbstractTableModel
子类化了它。当行中的一个字段具有特定值时,我希望能够将行颜色更改为红色。我看到很多例子,答案是调用模型setData
并使用Qt::BackgroundRole
更改背景颜色。由于我将AbstractTableModel
子类化,因此我重新实现了setData
和data
,因此调用模型setData
对背景颜色角色没有任何作用,因为我只处理角色为Qt::DisplayRole
的数据。
我想我的第一个问题是:有没有更简单的方法来改变整个角色的颜色?如果没有,我猜我必须在setData
和data
中实现该部分来处理BackgroundRole
,如果有人有如何做到这一点的例子,我不知道该怎么做很多...
【问题讨论】:
【参考方案1】:这比我想象的要容易...在我的数据方法中,我添加了对
的检查if (role == Qt::BackgroundColorRole)
在那个 if 块中。我检查进行值比较以查看是否是我必须更改颜色的行,如果是,我返回:
return QVariant(QColor(Qt::red));
【讨论】:
【参考方案2】:更好的答案是使用view
提供的delegate
来完成此任务,而根本不要触摸model
。为什么模型应该知道您希望视图是什么颜色?如果您希望多个视图的行为不同,会发生什么?等等。
您可以使用setColumnDelegate
、setRowDelegate
或许多其他机制。查看这些函数以获得完整答案。
【讨论】:
(绝对正确) uv 建议正确的事情!最终会产生大量技术债务的变通办法很常见。以上是关于QTableView 根据值更改行颜色的主要内容,如果未能解决你的问题,请参考以下文章