如何为 QTableWidgetItem 设置“普通”或“平面”背景颜色

Posted

技术标签:

【中文标题】如何为 QTableWidgetItem 设置“普通”或“平面”背景颜色【英文标题】:How to set a "plain" or "flat" background color for a QTableWidgetItem 【发布时间】:2014-07-26 18:29:35 【问题描述】:

我有一个 QTableWidget。我想为行使用交替的背景颜色,但我不能使用 QTableWidget::setAlternatingRowColors 因为我需要一种颜色用于两行,另一种颜色用于接下来的两行,依此类推(见下图)。

因此,当我添加一个 QTableWidgetItem 时,我通过 QTableWidgetItem::setBackground() 手动设置了相应的背景颜色。

但是我没有得到“平坦”或“普通”的背景,而是渐变和圆角:

我希望整个单元格都具有背景色,而不需要进一步的“装饰”。我怎样才能摆脱它?

【问题讨论】:

不确定这是否可行,但我有以下想法:由于setBackground 接受QBrush,并且由于可以从图像构造QBrush,因此您可以尝试使用 1-像素图像作为背景。我认为它只是在该区域内重复。 我已经尝试设置 QBrush。没用... 结果如何?你为此使用了图像吗?将QBrushQColor 一起使用与直接使用QColor 相同。这个想法是使用图像。 对不起,我没有正确阅读您的帖子。使用由填充了所需颜色的单像素图​​像构建的 QBrush,我实际上得到了我想要的结果。非常感谢:-) 很高兴我能帮上忙!我将解决方案作为答案编写,因此如果结果正确,您可以接受它。 :) 【参考方案1】:

当您选择单一颜色作为背景(QBrushQColor 构造)时,样式引擎会尝试渲染带样式的背景,在您的情况下,它会绘制带有边框的渐变。

您可以使用从QImage 构造的QBrush 来欺骗样式引擎,因此渲染引擎准确地 绘制该图像,仅此而已。在您的情况下,请使用具有单个像素的图像,即您想要的颜色作为背景。为此,构建一个 1x1 大小的QImage 并使用fill 设置像素的颜色,然后将该图像用作画笔:

// Create the image (using the default image format)
QImage img(QSize(1, 1), QImage::Format_ARGB32_Premultiplied);

// Set the color, here light gray:
img.fill(QColor(224, 224, 224));

// Apply the image as the background for the item:
item->setBackground(QBrush(img));

【讨论】:

以上是关于如何为 QTableWidgetItem 设置“普通”或“平面”背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

qtablewidgetitem 无法 new

如何为 CAShapeLayer 路径和填充颜色设置动画

如何为 RecyclerView 设置 onItemClickListener? [复制]

如何为 UITabBarItem 设置自定义标题属性

如何将 QTableWidgetItem 表示法更改为 standardNotation

如何为 QBChat 设置 currentUser()?