Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QTableView基于值更改行颜色_C++_Qt_Qtableview_Qabstracttablemodel - Fatal编程技术网

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
,因此调用models
setData
与背景色角色无关,因为我只处理角色为
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用于建议正确的内容!常见的情况是,解决办法最终会产生大量技术债务。