将默认颜色恢复到 QTableWidgetItem?

Posted

技术标签:

【中文标题】将默认颜色恢复到 QTableWidgetItem?【英文标题】:Restoring Default Colors To A QTableWidgetItem? 【发布时间】:2016-05-15 16:43:47 【问题描述】:

我正在更改 QTableWdiget 中某些单元格的前景色和背景色以突出显示某些项目。我想稍后删除突出显示并恢复单元格的默认前景色和背景色,但我在执行此操作时遇到了问题。

目前我正在将颜色重置为白色背景上的黑色文本,这在大多数系统上都是正确的。但是,在某些系统上,这些颜色将是错误的,例如使用高可行性主题的系统,其中文本为白色,背景为黑色。

因此,我想找到一种方法来将默认颜色恢复到 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 对不起,是的,你是对的。它只是显示为黑色。无论哪种方式,看起来这都行不通。在更改 QTableWidget 项目后,我需要一些方法将它们恢复为其原始的前景色和背景色,但我似乎无法使用函数来执行此操作。 甚至没有setData(QVariant(), Qt::BackgroundRole) 或类似的? @peppe 我遇到的问题不是设置颜色,而是知道要恢复的默认颜色。我将编辑我的问题以使其更清楚。 【参考方案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);

【讨论】:

以上是关于将默认颜色恢复到 QTableWidgetItem?的主要内容,如果未能解决你的问题,请参考以下文章

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

春季启动横幅打印后如何将终端颜色恢复为默认值

如何在点击时改变图标的颜色,并在释放时恢复到默认颜色。

单击时如何更改按钮的颜色,并在下次单击时恢复为默认颜色?

js验证非空后,输入框边框变红,如果输入正确怎么让边框恢复到默认的颜色?

QTableWidgetItem 将光标移动到一个单元格(不只选择)