我需要帮助才能使用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函数。
还有其他办法吗?
答案 0 :(得分:0)
用于交替颜色的算法不依赖于数据,您只对整个数据集使用两种颜色。在这种情况下,您不应该使用模型来确定背景颜色,让视图通过调用QAbstractItemView::setAlternatingRowColors(true)
自动执行此操作
代表也不应该用于绘制视图的单元格,这不是委托的要点。
它应该仅用于处理编辑器,即用于编辑数据的小部件。当视图检测到编辑触发器并且编辑完成后销毁编辑器时,将创建这些窗口小部件。在视图中绘制其余数据不受代理人编辑的绘画影响。