2012-11-12 2 views
6

QWidget의 배경을 변경하는 메뉴를 만들어야합니다. QMenu를 채우는 QActions에 선택한 색상을 나타내는 QIcon을 배치하고 싶습니다. 나는 Photoshop을 튕겨서 아이콘을 수동으로 그릴 필요가 없다. 특정 색상으로 채워진 간단한 아이콘을 프로그래밍 할 수 있습니까? 이 방법으로 필자는 필요한 경우 임의의 수의 QAction을 가질 수 있으며 Photoshop에서 전체 아이콘 집합을 만들 필요가 없습니다. \간단한 색상 채우기 Qt의 QIcons

답변

12

QPixmap에서 QIcon을 구성 할 수 있습니다. QPixmap은 주어진 크기로 생성 된 다음 '채우기'를 사용하여 색상으로 채워질 수 있습니다.

예를 들어, 적색 100 × 100 아이콘을 만들 수 있습니다 :

QPixmap pixmap(100,100); 
pixmap.fill(QColor("red")); 
QIcon redIcon(pixmap); 
+0

이 채울 것 이미지의 투명한 부분, 맞습니까? QIcon의 투명한 부분을 색상으로 채우는 데 사용할 수 있습니까? – SexyBeast

+0

나는 이해가되지 않을까 걱정된다. 이 코드는 완전히 붉은 색 사각형 인 새로운 아이콘을 만듭니다. – cgmb

5

는 그냥 다른 색상에 아이콘에서 색상을 변경하는 방법을 알아 냈어. 따라서, 아이콘의 이미지는 하나의 단색으로 구성되어야합니다 (여기에 '블랙') ('빨간색'같은) 다른 색상으로 픽스맵과 마스킹 기능을 사용하여 변환 할 수있는 :

pixmap = QPixmap(filename) 
mask = pixmap.createMaskFromColor(QColor('black'), Qt.MaskOutColor) 
pixmap.fill((QColor('red'))) 
pixmap.setMask(mask) 

btNew = QToolButton() 
btNew.setIcon(QIcon(pixmap)) 
+0

멋진데, createMaskFromColor (QColor ('transparent'), Qt.MaskInColor)가 나에게 잘 맞습니다. – falkb

+0

주제가 C++로 태그되었지만 유효한 C++ 코드는 아닙니다. 편집을 원하지만 검토자가 잘 모르는 이유로 거부했습니다. 게다가이 솔루션은 C++로 이식 한 후에 저에게 도움이되었습니다. – bns

+0

나는 당신이 옳다고 생각합니다. 나는 그 질문이 C++과 관련되어 있다는 것을 알지 못했습니다. 그러나 나는 이미 기존의 대답을 바꾸는 것이 아니라고 생각합니다. 그리고 당신의 코드가 안정적이어서 나는 그것을 스스로 받아 들일 수 없다. 제 생각에 당신은 스스로 대답해야합니다! 힌트를 가져 주셔서 감사합니다. – Henhuy

관련 문제