C++ 如何设置一个";普通的;或;“平坦”;QTableWidgetItem的背景色

C++ 如何设置一个";普通的;或;“平坦”;QTableWidgetItem的背景色,c++,qt,qt4,qtablewidget,qtablewidgetitem,C++,Qt,Qt4,Qtablewidget,Qtablewidgetitem,我有一个QTableWidget。我想为行使用交替背景色,但我不能使用QTableWidget::setAlternatingRowColor,因为我需要两行使用一种颜色,下两行使用另一种颜色,以此类推(参见下图) 因此,当我添加QTableWidgetItem时,我通过QTableWidgetItem::setBackground()手动设置相应的背景颜色 但我并没有通过这个获得“平坦”或“普通”的背景,而是渐变和圆角: 我希望所有的单元格都有背景色,不需要进一步的“装饰”。如何消除这种情况

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

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

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


我希望所有的单元格都有背景色,不需要进一步的“装饰”。如何消除这种情况?

当您选择一种颜色作为背景(
QBrush
QColor
构建)时,样式引擎会尝试渲染一个样式化的背景,在您的例子中,它会使用边框绘制此渐变

您可以通过使用由
QImage
构造的
QBrush
来欺骗样式引擎,这样渲染引擎只需绘制该图像即可。在您的情况下,使用具有单个像素的图像,即您想要作为背景的颜色。为此,构建1x1大小的
QImage
,并使用
填充设置像素的颜色,然后将该图像用作画笔:

// 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));

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