Qt - QTableview 行颜色与代表

Qt - QTableview row color with delegates

我对 QTableView 的行着色有一个非常具体的问题,主要问题是为行的整个背景着色,但也在不同的列上使用委托,这是我尝试过的:

Picture when the colors are working

Picture after resizing, after clipping, it sometimes stops to this, can be fixed by defocusing the main window (click outside of it), accessing the context menu and other things like that

问题是有些列使用默认 editor/delegate,有些使用自定义列。

问题是,实现它的最佳方法是什么?

或者,我可以绘制整行并限制其他代表重新绘制他们的背景吗?

我设法找到了解决方案:

我的主要问题是我的代表没有从模型中获取背景颜色来绘制它,我通过从 QItemDelegate 实现中复制背景的实现来解决这个问题,我需要在我的自定义委托的 paint() 方法中实现的是:

    // draw the background color
if (option.showDecorationSelected && (option.state & QStyle::State_Selected)) {
    QPalette::ColorGroup cg = option.state & QStyle::State_Enabled
                              ? QPalette::Normal : QPalette::Disabled;
    painter->fillRect(option.rect, option.palette.brush(cg, QPalette::Highlight));
} else {
    QVariant value = index.data(Qt::BackgroundColorRole);
    if (value.isValid() && qvariant_cast<QColor>(value).isValid())
        painter->fillRect(option.rect, qvariant_cast<QColor>(value));
}

有了这个,我现在可以从模型中提取颜色并绘制代表背景。