2012-11-12 14 views
6

Ich muss ein Menü erstellen, das den Hintergrund eines QWidget ändert. Ich möchte ein QIcon, das die ausgewählte Farbe darstellt, in die QActions platzieren, die das QMenu füllen. Ich möchte Photoshop nicht mehr rauslassen und die Icons manuell malen müssen. Ist es möglich, ein einfaches Symbol zu programmieren, das mit einer bestimmten Farbe gefüllt ist? Auf diese Weise kann ich bei Bedarf eine beliebige Anzahl von QActions haben und ich muss in Photoshop keine ganze Reihe von Icons erstellen. \Einfache Farbe füllen QIcons in Qt

Antwort

12

Sie können ein QIcon aus einer QPixmap erstellen. QPixmap kann mit einer bestimmten Größe erstellt und dann mit 'fill' gefüllt werden.

Zum Beispiel ein rotes 100x100 Symbol zu erstellen:

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

Dies zu füllen nur die transparenten Teile des Bildes, oder? Ich meine, kann man damit die transparenten Teile eines QIcon mit Farbe füllen? – SexyBeast

+0

Ich fürchte, ich verstehe es nicht. Dieser Code erstellt ein vollständig neues Symbol, das ein festes rotes Quadrat ist. – cgmb

5

gerade herausgefunden, wie Farbe zu einer anderen Farbe von Symbol zu ändern. Daher muss das Bild des Symbols aus einer Farbe (hier: ‚black‘), die eine pixmap und seine Maskierung Fähigkeit, sich in eine andere Farbe verwenden (wie ‚rot‘) umgewandelt werden kann:

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

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

Cool, obwohl createMaskFromColor (QColor ('transparent'), Qt.MaskInColor) besser für mich funktioniert – falkb

+0

Das Thema ist mit C++ markiert, aber das ist kein gültiger C++ - Code. Ich möchte es bearbeiten, aber die Kritiker haben es aus Gründen abgelehnt, die ich nicht kenne. Außerdem funktionierte die Lösung für mich nach der Portierung nach C++. – bns

+0

Ich denke, Sie haben Recht - ich habe nicht erkannt, dass die Frage zu C++ verwandt war - aber ich denke auch, dass es nicht eine bereits vorhandene Antwort so viel ändern soll ... Und ich weiß nicht, ob Ihr Code ist stabil - so kann ich es nicht für mich selbst akzeptieren. Ich denke, du solltest dir selbst antworten! Danke für den Tipp. – Henhuy