使用QSortFilterProxyModel的qtableview的alternatingRowColors

时间:2014-05-21 18:25:00

标签: c++ qt

我需要帮助才能使用qtableview的alternatingRowColors,它使用QSortFilterProxyModel。

QSortFilterProxyModel的过滤器破坏了我的表格视图的交替颜色。

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

最好的方法是什么?

ps。:我正在使用一个继承自QStyledItemDelegate的类。 我可以在paint方法中做些什么吗?

提前致谢。

ADD:

我在我的模特身上尝试这个。

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函数。

还有其他办法吗?

1 个答案:

答案 0 :(得分:0)

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

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

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