如何在 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
是定义项目边界的属性,在QTableView
和notQTableView::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 中设置单元格边框和背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章