2012-01-19 229 views
3

我有一个QTableView,我用我自己的模型实现了QAbstractTableModel的子类。我希望能够在行中的某个字段具有特定值时将行颜色更改为红色。我看到很多示例,答案是调用模型setData并使用Qt::BackgroundRole更改背景颜色。由于我的子类我AbstractTableModel重新实现setDatadata所以调用模型setData什么都不做背景色作用,因为我只处理数据,其作用是Qt::DisplayRoleQTableView根据值更改行颜色

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

回答

4

这是比我想象的要简单......在我的数据的方法我增加了一个支票

​​3210

在,如果块。我检查做的值进行比较,看是否这就是行我必须要改变的颜色,如果是我回:

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

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

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

+0

(绝对真实)的紫外线提示正确的事情!通常看到最终会产生大量技术债务的变通办法。 – g24l 2016-01-21 12:08:26