我对QTableView
的行着色有一个非常具体的问题,主要问题是着色整行的背景,还使用不同列上的委托,这是我试过的:
data()
:此实现的问题在于,当着色发生时,自定义委托(对于列)的背景不会改变。QStyledItemDelegate
,此方法适用于着色,问题是我无法为该特定行分配任何其他列委托。QStyledItemDelegate
,画家填充整行的rectangle
,这对我来说几乎是正确的,所有列都是彩色的,问题是,在调整大小时,我得到剪裁和有时,背景颜色会消失在其他列上,屏幕截图如下。Picture when the colors are working
问题是某些列使用默认编辑器/委托,而有些列使用自定义编辑器/委托。
问题是,实现这一目标的最佳方法是什么?
或者,我可以绘制整行并限制其他代表重新绘制背景吗?
答案 0 :(得分:0)
我设法找到了解决方案:
我的主要问题是我的代表没有从模型中获取背景颜色来绘制它,我通过从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));
}
有了这个,我现在可以从模型中获取颜色并绘制委托背景。