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

N A*_*lex 3 qt qt4 qtablewidget qtablewidgetitem

我有一个QTableWidget3 列。其中 2 列中有一些文本,但其中一列是空的,我希望它具有背景颜色。另外我希望单元格有边框。

如果我做

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;

}
Run Code Online (Sandbox Code Playgroud)

一切都按预期工作。

但是如果在这段代码之前我尝试添加一个边框

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

背景没有设置。

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

我也尝试setShowGrid(true)插入上面的样式表,但没有显示边框。

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

我错过了什么吗?我还应该尝试什么? 作为替代方案,我可以定位样式中的特定行/单元格,以便我可以构建一个满足我想要的样式表字符串吗?

编辑: 我可以使用其他样式QTableWidget::item并应用它们,问题是当我有边框时。我还尝试将边框样式写为:

border-width: 1px;
border-style: solid;
border-color: white;
Run Code Online (Sandbox Code Playgroud)

但仍然没有运气。此外,如果我从样式设置背景,它会起作用。如果我在代码中设置它就不起作用。

Mil*_*fie 6

以下是为表格设置适当样式所需的属性。请注意,gridline-color是定义项目边框的属性,它是在 中定义的,QTableView不是 在 中定义的QTableView::item

QTableView
{
    color: {color};
    border: 1px solid {color};
    background: {color};
    gridline-color: {color};
}
QTableView::item
{
    background: {color};
}
Run Code Online (Sandbox Code Playgroud)

显然,您将为{color}每个属性替换为适当的颜色。