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

时间:2016-03-09 14:11:59

标签: qt qt4 qtablewidget qtablewidgetitem

我有一个包含3列的QTableWidget。其中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;

}

一切都按预期工作。

但是如果在此代码之前我尝试使用

添加边框
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 个答案:

答案 0 :(得分:4)

以下是让您的表格正确设置所需的属性。请注意,gridline-color是定义项目边框的属性,在QTableView QTableView::item中定义。

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

显然,你会用每种属性的适当颜色替换{color}

答案 1 :(得分:0)

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

QTableView {
    background-color : none;
}

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