Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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++ 使用QSortFilterProxyModel的qtableview的交替行颜色_C++_Qt - Fatal编程技术网

C++ 使用QSortFilterProxyModel的qtableview的交替行颜色

C++ 使用QSortFilterProxyModel的qtableview的交替行颜色,c++,qt,C++,Qt,我需要帮助来使用使用QSortFilterProxy模型的qtableview的AlternatingRowColor QSortFilterProxyModel的过滤器会破坏我的表视图的交替颜色 我想每次应用过滤器时,我都需要绘制行的背景 最好的方法是什么 注:我正在使用一个从QStyledItemDelegate继承的类。 我可以用画法做点什么吗 提前谢谢 加: 我在我的模型上试过这个 QVariant FilterProxyModel::data(const QModelIndex &am

我需要帮助来使用使用QSortFilterProxy模型的qtableview的AlternatingRowColor

QSortFilterProxyModel的过滤器会破坏我的表视图的交替颜色

我想每次应用过滤器时,我都需要绘制行的背景

最好的方法是什么

注:我正在使用一个从QStyledItemDelegate继承的类。 我可以用画法做点什么吗

提前谢谢

加:

我在我的模型上试过这个

QVariant FilterProxyModel::data(const QModelIndex &index, int role) const{
QVariant v = QSortFilterProxyModel::data(index, role);
if (role == Qt::BackgroundColorRole)
  {
if(index.row() % 2 == 0)
  return QVariant(QColor(255,255,255));
else
  return QVariant(QColor(248,248,248));
}
return (v);
}
这解决了交替行颜色问题,但 这似乎是在取消我实现的ItemDelegate::paint函数


还有其他方法吗???

您的颜色交替算法不依赖于数据,您只对整个数据集使用两种颜色。在这种情况下,您不应该使用模型来确定背景颜色,让视图通过调用
qabstractemview::setAlternatingRowColors(true)

委托也不应用于绘制视图的单元格,这不是委托的要点


它应该仅用于处理编辑器,即用于编辑数据的小部件。这些小部件是在视图检测到编辑触发器时创建的,编辑完成后编辑器将被销毁。视图中其余数据的绘制不受代理编辑器绘制的影响。

还有一个
Qt::BackgroundRole
,您可以在模型的data()函数中使用它来定义项目的背景色。为什么过滤器会破坏背景?@vahancho I添加了我的date()实现和一些关于这个问题的信息。我需要更多的帮助。你能帮我吗?@RobbieE发生的一个例子是:我的桌子上有3行。第1行和第3行是彩色的,第2行是白色的。当filtermodel隐藏第二行时,保留两行颜色。我想要的是第三排变成白色。对不起我的英语。我已经在我的视图中将SetAlternatingRowColor设置为true。它可以工作,但当应用过滤器时,会发生我提到的那种情况。这就是为什么我说你不应该在模型中设置背景颜色,视图已经可以这样做了。是的,视图为我这样做,但我猜当应用过滤器时,它只会隐藏行,视图不会刷新行颜色,因此,我可能有两行在序列中具有相同的颜色。我想知道如何解决同一颜色的行在序列中的问题。你不明白我的意思。您的过滤器正在为Qt::BackgroundRole返回颜色数据。不应该。视图必须负责替换颜色,而不是模型、过滤器、代理,也不是从QAbstractItemModel派生的任何类。抱歉。我的英语不是很好,谢谢你帮助我。数据方法只是解决我问题的一种尝试。我已经将其从应用程序中删除。我不知道怎样才能让风景变成这样。我有一个从QSortFilterProxyModel派生的模型类,我正在实现filterAcceptsRow。模型的表现与正常情况完全不同。我不知道为什么SetAlternatingRowColor(true)在应用过滤器后不起作用。