恢复QTableWidgetItem的默认颜色?

4

我正在改变QTableWidget中一些单元格的前景色和背景色,以突出显示某些项目。但是,我后来想要取消突出显示并将单元格恢复为默认的前景色和背景色,但我做不到这一点。

目前,我将颜色重置为黑色文本在白色背景上,在大多数系统上都是正确的。但是,在一些使用高可见度主题的系统(例如文本为白色且背景为黑色),这些颜色将是错误的。

因此,我想找到一种方法来将 QTableWidget 中的单元格恢复为默认颜色。为此,我尝试在更改颜色之前备份默认颜色,但这并不能保存正确的颜色:

QColor fgCol = table->item(0, 0)->foreground().color();
QColor bgCol = table->item(0, 0)->background().color();

我也尝试过这个方法,但也不起作用:
QColor fgCol = table->item(0, 0)->data(Qt::ForegroundRole).value<QBrush>().color();
QColor bgCol = table->item(0, 0)->data(Qt::BackgroundRole).value<QBrush>().color();

有没有办法将QTableWidgetItem的颜色恢复为默认颜色?

很确定它们返回无效的颜色(参见 isValid()),而不是黑色... - peppe
@peppe 抱歉,你说得对。它只显示为黑色。无论如何,看起来这样做行不通。我需要一种方法在更改QTableWidget项的前景和背景颜色后将其恢复到原始颜色,但我似乎找不到相应的函数。 - Ian Conner
没有类似于 setData(QVariant(), Qt::BackgroundRole) 的东西吗? - peppe
1
@peppe 我遇到的问题不是设置颜色,而是知道要恢复的默认颜色是什么。我会编辑我的问题,尽力让它更清晰明了。 - Ian Conner
1个回答

1

你需要备份画笔,而不仅仅是颜色:

QBrush fgBrush = table->item(0, 0)->foreground();
QBrush bgBrush = table->item(0, 0)->background();

并在以后恢复它们:
table->item(0, 0)->setForeground(fgBrush);
table->item(0, 0)->setBackground(bgBrush);

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