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

Posted

技术标签:

【中文标题】如何在 QTableWidgetItem 中设置单元格边框和背景颜色?【英文标题】:How to set cell border and background color in QTableWidgetItem? 【发布时间】:2016-03-09 14:11:58 【问题描述】:

我有一个包含 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;

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

【问题讨论】:

【参考方案1】:

以下是您需要的属性,以使您的表格具有适当的样式。注意gridline-color是定义项目边界的属性,在QTableViewnotQTableView::item中定义。

QTableView

    color: color;
    border: 1px solid color;
    background: color;
    gridline-color: color;

QTableView::item

    background: color;

显然,您可以将 color 替换为每个属性的相应颜色。

【讨论】:

它有效,但只有gridline-color 就足够了。我看到setStylesheet() 设置的样式比setBackground() 设置的样式具有更高的优先级等,你能提供任何我可以阅读的文档吗?谢谢。 我只是想提供所有的属性来彻底。我的书签中有Style Sheet Documentaiton。【参考方案2】:

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

QTableView 
    background-color : none;


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

【讨论】:

感谢您的回答,但这并不能解决问题。我认为QTableWidget::item 是有效的,因为它确实设置了单元格样式并添加了边框。你提供的样式也是一样的,加了边框,但是使用的时候,背景色不起作用。 尝试为 QTableWidget 和 items 设置背景颜色怎么样?顺便说一句,如果它不起作用,我会更新或删除我的答案 单元格背景颜色似乎适用于上述样式,但现在边框不再显示。并且发生了一些奇怪的事情,如果我在第一个 之后添加一个 ;,那么颜色会起作用并且没有设置边框,如果我删除了;,那么颜色就不起作用并且设置了边框。我猜; 禁用了QTableView::item 样式,这就是它起作用的原因。 嗯,奇怪...您是否在项目中使用了其他可以传播/可以覆盖上述样式的样式表?将背景颜色设置为红色,看看你是否能发现类似的东西。 我尝试设置为红色并且它起作用了。我还使用了table->styleSheet(),它只返回了添加的样式(答案中的样式)。我也尝试用一张表创建一个新项目,结果是一样的。无法重现问题?

以上是关于如何在 QTableWidgetItem 中设置单元格边框和背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中设置单选按钮

如何在jframe中的jpanel中设置单选按钮?

如何在选中的自定义元框中设置单选按钮?

在 QTableWidgetItem 中设置 mousePressEvent 处理程序

在 React 中设置单选按钮值

AngularJs - 在表格中设置单选按钮值