我有一个QTreeWidget
(但这个问题与任何类型的小部件有关),其中我有一些项目,在某些情况下使用item.setForeground(0,QBrush(QColor("red")))
将其前景颜色更改为红色。
稍后他们可以将前景色改回黑色。但问题是,如果窗口小部件已经设置了一些样式表,它将前景颜色改为黑色而不是黑色,那我就麻烦了。我的问题是如何根据应用的样式表将项目的颜色恢复为窗口小部件用于文本颜色的默认颜色?
例如,如果我应用深色样式表使小部件背景变暗并且默认文本颜色为白色,首先我可以看到白色项目,然后它们变为红色然后变为黑色。但我希望他们再次变白。但我不知道如何发现它们应该变成白色(而不是黑色)。
我试过了:
1)如果我使用item.setForeground(QtGui.QBrush())
我希望使用空的默认刷,我总是得到黑色文字
2)如果我查询文本颜色treeWidget.palette().text().color()
,无论样式表如何,我都会得到相同的颜色
答案 0 :(得分:1)
这个问题并不适用于“任何类型的小部件”,因为无法保证设置前景色始终有效。引用QPalette的文档:
警告:某些样式不会将调色板用于所有绘图 例如,如果他们使用本机主题引擎。情况就是这样 适用于Windows XP,Windows Vista和Mac OS X样式。
但是,如果问题仅限于模型项(例如QTreeWidgetItem
),则可以清除当前设置:
item.setData(column, QtCore.Qt.ForegroundRole, None)
在执行允许通过调色板进行更改的平台上,您可以获得如下默认调色板:
palette = QtGui.qApp.style().standardPalette()
然后应该允许您恢复原始值。