2016-11-16 8 views
2

У меня есть QTreeWidget (однако этот вопрос относится к любому виду виджетов), в котором у меня есть элементы, которые при определенных обстоятельствах меняют цвет переднего плана на красный, используя item.setForeground(0,QBrush(QColor("red"))).Изменение цвета текста виджета по умолчанию с применением стилей элементов QTreeWidget

Позже они могут изменить цвет переднего плана на черный. Но проблема в том, что если виджет был настроен на какую-то таблицу стилей, которая изменила цвет переднего плана, кроме черного, у меня проблемы. Мой вопрос заключается в том, как вернуть цвет элемента к цвету по умолчанию, используемому виджетам для цвета текста, с учетом применяемых таблиц стилей?

Например, если я применяю темную таблицу стилей, которая делает черный фон виджета темным, а цвет текста по умолчанию белым, сначала я вижу белые элементы, затем они меняются на красный, а затем становятся черными. Но я хочу, чтобы они снова стали белыми. Но я не знаю, как найти, что это белый (и не черный) цвет, который они должны изменить.

Я попытался это:

1) если я использую item.setForeground(QtGui.QBrush()) который я надеялся бы использовать пустую и поэтому по умолчанию кисти, я всегда получаю черный текст

2) если я запрашиваю цвет текста treeWidget.palette().text().color() Я всегда получаю тот же цвет, независимо от таблицы стилей

+0

Я боюсь, что я немного задал вопрос XY ... Моя цель состояла в том, чтобы просто сбросить цвет переднего плана, но мои попытки с 'setForeground()' позволяют мне далеко от правильного и простейшего решения (предложенное ekhumoro ниже), чтобы копаться в таблицах стилей и т. д. :) –

ответ

1

Этот вопрос не относится к «любому виду виджетов», потому что нет гарантии, что настройка цвета переднего плана всегда будет работать. Цитирую из документации для QPalette:

Предупреждения: Некоторые стили не использовать палитру для все рисования для например, если они используют родные тему двигателей. Это так: для стилей Windows XP, Windows Vista и Mac OS X.

Однако, если вопрос ограничен для моделирования элементов (таких как QTreeWidgetItem), вы можете удалить текущие настройки, как это:

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

На платформах, сделать позволяют изменения с помощью палитры, вы можете получить палитру по умолчанию следующим образом:

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

, который затем должен помочь вам восстановить исходные значения.

+0

Этот 'item.setData (...)', кажется, решает мою проблему, в отличие от 'item.setForeground()', который я использовал. На самом деле я, наконец, нашел один другой способ: переопределить метод MyTreeItem.data (column, role) 'для возврата None для роли переднего плана. Но 'setData (...)' кажется более элегантным, потому что ему не нужно определение моего собственного класса элемента. –