QTableView 根据值更改行颜色

Posted

技术标签:

【中文标题】QTableView 根据值更改行颜色【英文标题】:QTableView change row color based on a value 【发布时间】:2012-01-19 01:07:20 【问题描述】:

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

我想我的第一个问题是:有没有更简单的方法来改变整个角色的颜色?如果没有,我猜我必须在setDatadata 中实现该部分来处理BackgroundRole,如果有人有如何做到这一点的例子,我不知道该怎么做很多...

【问题讨论】:

【参考方案1】:

这比我想象的要容易...在我的数据方法中,我添加了对

的检查
if (role == Qt::BackgroundColorRole) 

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

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

【讨论】:

【参考方案2】:

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

您可以使用setColumnDelegatesetRowDelegate 或许多其他机制。查看这些函数以获得完整答案。

【讨论】:

(绝对正确) uv 建议正确的事情!最终会产生大量技术债务的变通办法很常见。

以上是关于QTableView 根据值更改行颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何根据列值更改行按钮类

PySpark:如何根据其他行值的值更改行+列的值

pyqt - 在 TableView 中更改行~单元格颜色

根据列中的文本更改行颜色

根据其他行的索引更改行颜色

Excel,单元格值更改时不同的行突出显示颜色