使用 QTreeWidget 项目的应用样式表修改默认小部件文本颜色

Modify default widget text color with applied stylesheet of QTreeWidget items

我有一个 QTreeWidget(但是这个问题与任何类型的小部件有关),其中我有一些项目,在某些情况下使用 item.setForeground(0,QBrush(QColor("red"))) 将它们的前景颜色更改为红色。

稍后他们可以将前景色改回黑色。但问题是,如果小部件已设置一些样式表,将前景色更改为黑色以外的颜色,我就有麻烦了。我的问题是如何将项目的颜色恢复为小部件在给定应用样式表的情况下用于文本颜色的默认颜色?

例如,如果我应用一个深色样式表,使小部件背景变暗,默认文本颜色为白色,首先我可以看到白色项目,然后它们变为红色,然后变为黑色。但我希望它们再次变白。但我不知道如何找到他们应该更改为白色(而不是黑色)的颜色。

我试过这个:

1) 如果我使用 item.setForeground(QtGui.QBrush()),我希望它会使用空的,因此默认画笔,我总是得到黑色文本

2) 如果我查询文本颜色 treeWidget.palette().text().color() 无论样式表如何,我总是得到相同的颜色

这个问题并不真正适用于 "any kind of widget",因为不能保证设置前景色总是有效。引用 QPalette 的文档:

Warning: Some styles do not use the palette for all drawing, for instance, if they make use of native theme engines. This is the case for both the Windows XP, Windows Vista, and the Mac OS X styles.

但是,如果问题仅限于模型项(例如QTreeWidgetItem),您可以像这样清除当前设置:

item.setData(column, QtCore.Qt.ForegroundRole, None)

允许通过调色板进行更改的平台上,您可以获得这样的默认调色板:

palette = QtGui.qApp.style().standardPalette()

这应该允许您恢复原始值。