如何为 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。没用...
结果如何?你为此使用了图像吗?将QBrush
与QColor
一起使用与直接使用QColor
相同。这个想法是使用图像。
对不起,我没有正确阅读您的帖子。使用由填充了所需颜色的单像素图像构建的 QBrush,我实际上得到了我想要的结果。非常感谢:-)
很高兴我能帮上忙!我将解决方案作为答案编写,因此如果结果正确,您可以接受它。 :)
【参考方案1】:
当您选择单一颜色作为背景(QBrush
由 QColor
构造)时,样式引擎会尝试渲染带样式的背景,在您的情况下,它会绘制带有边框的渐变。
您可以使用从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 设置“普通”或“平面”背景颜色的主要内容,如果未能解决你的问题,请参考以下文章
如何为 RecyclerView 设置 onItemClickListener? [复制]