C++ QTableView基于值更改行颜色
我有一个C++ QTableView基于值更改行颜色,c++,qt,qtableview,qabstracttablemodel,C++,Qt,Qtableview,Qabstracttablemodel,我有一个QTableView,它是我用自己的模型实现的,子类来自QAbstractTableModel。当行中的一个字段具有特定值时,我希望能够将行颜色更改为红色。我看到很多例子,答案是调用模型setData,并使用Qt::BackgroundRole更改背景颜色。由于我将AbstractTableModel子类化,我重新实现了setData和data,因此调用modelssetData与背景色角色无关,因为我只处理角色为Qt::DisplayRole的数据 我想我的第一个问题是:有没有更简单的
QTableView
,它是我用自己的模型实现的,子类来自QAbstractTableModel
。当行中的一个字段具有特定值时,我希望能够将行颜色更改为红色。我看到很多例子,答案是调用模型setData
,并使用Qt::BackgroundRole
更改背景颜色。由于我将AbstractTableModel
子类化,我重新实现了setData
和data
,因此调用modelssetData
与背景色角色无关,因为我只处理角色为Qt::DisplayRole
的数据
我想我的第一个问题是:有没有更简单的方法来改变整个角色的颜色?如果没有,我猜我必须在
setData
和data
中实现这一部分来处理背景角色
,我不知道该怎么做,如果有人有这样做的例子,它将真的帮助很大…这比我想象的要容易。。。在我的数据方法中,我添加了一个检查if (role == Qt::BackgroundColorRole)
return QVariant(QColor(Qt::red));
在那个if区。我检查并执行值比较,以查看这是否是我必须更改颜色的行,如果是,则返回:if (role == Qt::BackgroundColorRole)
return QVariant(QColor(Qt::red));
一个更好的答案是使用
视图提供的委托
执行此任务,并且根本不接触模型
。为什么模型应该知道您想要视图的颜色?如果希望多个视图的行为不同,会发生什么情况?等等
您可以使用setColumnDelegate
、或setRowDelegate
或许多其他机制。查看这些函数以获得完整答案。(绝对正确)uv用于建议正确的内容!常见的情况是,解决办法最终会产生大量技术债务。