2016-11-16 15 views
2

QTreeWidget (특정 위젯과 관련된이 질문은 어떤 상황에서 특정 상황에서 전경색을 item.setForeground(0,QBrush(QColor("red")))으로 변경)이 있습니다.QTreeWidget 항목의 적용된 스타일 시트로 기본 위젯 텍스트 색상을 수정하십시오.

나중에 자신의 전경색을 다시 검은 색으로 변경할 수 있습니다. 그러나 문제는 위젯이 전경색을 검은 색으로 변경 한 스타일 시트를 설정 한 경우 문제가 발생한다는 것입니다. 내 질문은 항목의 색상을 적용된 스타일 시트가 주어진 텍스트 색상의 위젯에서 사용하는 기본 색상으로 되돌리는 방법입니까?

예를 들어 위젯 배경을 어둡게하고 기본 텍스트 색을 흰색으로 만드는 어두운 스타일 시트를 적용하면 먼저 흰색 항목을 볼 수 있고 빨간색으로 변경된 다음 검정색으로 바뀝니다. 하지만 나는 그들을 다시 희고 원해. 그러나 나는 그들이 바꿔야 만하는 흰색 (그리고 검은 색이 아님) 색을 찾는 방법을 모른다. 나는 텍스트 색상 treeWidget.palette().text().color()를 조회하는 경우

1) 나는 빈 따라서 기본 브러시를 사용하는 것이 희망 item.setForeground(QtGui.QBrush())를 사용하는 경우, 항상 검은 색 텍스트

2를 얻을 수) 난 항상 얻을 :

나는이 시도 스타일 시트와 상관없이 동일한 색상

+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()와는 달리 문제를 해결하는 것으로 보인다. 사실 나는 마침내 서로 다른 방법을 발견했다 : 전경 역할에 대해 None을 반환하는 MyTreeItem.data (column, role) 메서드를 재정의하는 것. 그러나'setData (...)'는 내 자신의 항목 클래스를 정의 할 필요가 없기 때문에 좀 더 우아한 옵션으로 보인다. –