如何在QTableWidgetItem中设置单元格边框和背景颜色?

3

我有一个带有3列的QTableWidget。其中两列中有一些文本,但其中一列是空的,我希望它有一个背景颜色。此外,我希望单元格有边框。

如果我这样做:

int i = 0;
foreach (tableData el, data) {
    //setting the first cell

    ui->eventTable->setItem(i, 1, new QTableWidgetItem); 
    //ui->eventTable->item(i, 1)->setBackground(el.severityColor);
    //ui->eventTable->item(i, 1)->setBackgroundColor(el.severityColor);
    ui->eventTable->item(i, 1)->setData(
        Qt::BackgroundRole,
        QBrush(el.severityColor)
    );

    //setting the third cell

    ++i;

}

一切都如预期般工作。

但如果在这段代码之前尝试添加边框,则会出现问题:

QString style(
    "QTableWidget::item {"
        "border: 1px solid white;"
    "}"
);
ui->eventTable->setStyleSheet(style);

背景未设置。

我尝试使用setBackground()setBackgroundColor()(即使它已被弃用)和setData(),如代码所示,但结果是相同的。

此外,我尝试使用setShowGrid(true) 替换上面的样式表,但边框没有显示。

您可以通过创建一个1行1列的表格并尝试设置单元格的背景色,然后添加边框样式表来重现此问题。

我漏掉了什么吗?我还应该尝试什么? 作为一种替代方法,我可以在样式中针对特定行/单元格进行定位,以便构建一个达到目标的样式表字符串吗?

编辑: 我也可以在 QTableWidget::item 中添加其他的样式并将其应用,问题出在边框上。 我还尝试以以下方式编写边框样式:

border-width: 1px;
border-style: solid;
border-color: white;

但仍然没有成功。 另外,如果我从样式中设置背景,它可以工作。如果我在代码中设置它,则无法正常工作。

2个回答

9
以下是使您的表格样式适当的属性。请注意,gridline-color 是定义项目边框的属性,定义在 QTableView 中而不是 QTableView::item 中。
QTableView
{
    color: {color};
    border: 1px solid {color};
    background: {color};
    gridline-color: {color};
}
QTableView::item
{
    background: {color};
}

显然,您需要为每个属性替换{color}为相应的颜色。

它可以工作,但只有gridline-color就足够了。我发现使用setStylesheet()设置的样式比使用setBackground()等设置的样式具有更高的优先级,您能否提供任何文档,让我可以阅读这方面的内容?谢谢。 - N Alex
我只是想提供所有属性以做到全面。我在我的书签中有样式表文档 - MildWolfie

0

我猜你需要设置背景和边框属性

QTableView {
    background-color : none;
}

QTableView::item {
    border: 1px solid white;
    background-color : none;
}

谢谢你的回答,但是它并没有解决问题。我认为QTableWidget::item是有效的,因为它确实可以给单元格添加样式和边框。而且你提供的样式也能添加边框,但是使用时背景颜色却无法生效。 - N Alex
尝试为QTableWidget和其项同时设置背景颜色怎么样?顺便说一下,如果不起作用,我会更新或删除我的答案。 - floppy12
单元格的背景颜色似乎与上面的样式一起工作,但现在边框不再显示了。而且还发生了奇怪的事情,如果我在第一个 } 后面添加一个 ;,那么颜色就可以工作而边框没有设置;如果我删除 ;,则颜色不起作用,而边框会被设置。我猜测是 ; 禁用了 QTableView::item 样式,所以才可以正常工作。 - N Alex
嗯,奇怪...您在项目中使用其他样式表吗?这些样式表可能会被传播/覆盖上面的样式。将背景颜色设置为红色,看看能否发现类似的情况。 - floppy12
我尝试将其设置为红色并成功了。此外,我使用了 table->styleSheet() 并且它仅返回添加的样式(答案中的那些)。我还尝试创建一个只有表格的新项目,结果是相同的。你无法重现这个问题吗? - N Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接