3

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

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

4

2 回答 2

4

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

if (role == Qt::BackgroundColorRole) 

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

return QVariant(QColor(Qt::red));
于 2012-01-19T02:04:46.630 回答
4

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

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

于 2014-02-05T22:14:57.830 回答